我已經完全重寫了第一篇文章,以更好地顯示問題所在。正常化HLSL中的矢量錯誤
我使用的是ps v1.4(我支持的最高版本)並且不斷收到錯誤。
它發生在任何時候我使用任何類型的功能,如COS,點,距離,sqrt,normalize等傳遞到pixelshader的東西。
例如,我需要做「normalize(LightPosition - PixelPosition)」來在我的pixelshader中使用點光源,但normalize會給我一個錯誤。
有些事情要注意 -
我可以使用像pow,abs和radians這樣的東西,沒有錯誤。
如果完成了從頂點着色器傳遞的某些內容,則只有一個錯誤。 (例如,我可以在沒有錯誤的情況下獲取本地像素變量的sqrt)
我從傳入的任何變量,即使是文本座標,顏色等等,都會產生錯誤。
頂點着色器內部我可以做所有這些函數在任何變量傳入時都沒有錯誤,只有在pixelshader中我得到一個錯誤
從頂點傳遞到像素着色器的所有值都是正確的,因爲如果我使用軟件處理而不是硬件,則不會得到錯誤和完美照明的場景。
由於規範化向量本質上是我的錯誤形成的地方,我嘗試創建我自己的規範化函數。
我稱之爲規範(LightPosition - PixelPosition)和「規範」是這樣的 -
float3 Norm(float3 v)
{
return v/sqrt(dot(v, v));
}
我仍然得到錯誤,因爲我想在技術上我仍然試圖採取pixelshader內開方。
的錯誤是沒有任何具體的,它只是說,在那裏我打開我的.fx文件在C#中的行「錯誤應用」
我想它實際上是一個編譯錯誤,因爲我必須使用這樣的舊版本(VS 1.1和PS 1.4)
使用fxc.exe它告訴我「的指令不能映射到像素着色指令集」調試
你得到了什麼錯誤? – ssube
什麼是錯誤?這是在像素還是頂點?你確定你的GPU是10歲,只支持1.1?我不認爲這些舊平臺經過了非常多的測試,所以很可能是編譯器錯誤。 –
每一點都可以在這裏找到http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series3/The_first_light.php我不認爲我的GPU是10歲,但我檢查了DevCaps。 VertexShaderVersion,它給了我1.1。關於錯誤,它是int pixelshader,它給我一個我加載我的行上的錯誤。fx文件(在C#中) – Frobot