Direct3D歷代都提供了一些光照的方式,但隨著畫面的複雜,DX自帶的光照越來越無法滿足開發的需要,於是就出現了shader,中文一般翻譯為著色器,事實上個人認為這個單詞比較難確切翻譯。shader在DX9來說分為pixelshader和vertexshader,後者用於頂點(模型的頂點)著色,前者則用於每個象素的著色。什麼叫著色麼。。。。最好能有一點3D程式設計基礎才方便理解,否則說起來太麻煩。簡單說象素,就是光柵化投影到2D的每個點,著色,則是按照一定的演算法,根據光源、物體本身的屬性來確定該象素的具體顏色的過程。pixelshader和vertexshader在Direct3D8/9中合稱ShaderModel,OpenGL和之後的Direcrt3D還有別的shader。早期的hardwareT&L事實上也支援自定義shader,但是缺點是開發難度很高,shadermodel1.1(也可能是2.0,這裡不十分肯定)以後支援用C語言寫一個shader,然後讓D3D程式執行,簡化了開發。1.0/1.1/2.0/3.0/的區別,前2個我不熟,只知道侷限較大,3.0對比2.0最著名的變化則是(理論上)無限長指令的支援,其他變化主要是規格的提升(比如對HDR支援精度的提高等)總的來說,這東西比較難解釋。。。
Direct3D歷代都提供了一些光照的方式,但隨著畫面的複雜,DX自帶的光照越來越無法滿足開發的需要,於是就出現了shader,中文一般翻譯為著色器,事實上個人認為這個單詞比較難確切翻譯。shader在DX9來說分為pixelshader和vertexshader,後者用於頂點(模型的頂點)著色,前者則用於每個象素的著色。什麼叫著色麼。。。。最好能有一點3D程式設計基礎才方便理解,否則說起來太麻煩。簡單說象素,就是光柵化投影到2D的每個點,著色,則是按照一定的演算法,根據光源、物體本身的屬性來確定該象素的具體顏色的過程。pixelshader和vertexshader在Direct3D8/9中合稱ShaderModel,OpenGL和之後的Direcrt3D還有別的shader。早期的hardwareT&L事實上也支援自定義shader,但是缺點是開發難度很高,shadermodel1.1(也可能是2.0,這裡不十分肯定)以後支援用C語言寫一個shader,然後讓D3D程式執行,簡化了開發。1.0/1.1/2.0/3.0/的區別,前2個我不熟,只知道侷限較大,3.0對比2.0最著名的變化則是(理論上)無限長指令的支援,其他變化主要是規格的提升(比如對HDR支援精度的提高等)總的來說,這東西比較難解釋。。。