2012-09-17 41 views
0

我最近試圖在Silverlight 5中用XNA創建一些3D渲染代碼。不幸的是,我一直無法獲得任何東西(使用我的自定義着色器)工作。在Silverlight 5中使用自定義着色器XNA

基本效果在立方體上使用,僅使用VertexPositionColor信息,但當切換到使用自定義着色器時,似乎沒有任何東西呈現(或呈現在屏幕外)。

爲了嘗試和幫助自己解決這個問題,我甚至得到了BasicEffect的hlsl代碼,但它並沒有做任何我沒有做的事情。

的代碼發生在一個世界,查看和投影矩陣和以下列順序由位置乘以每一個:

float4 pos_ws = mul(position, World); 
float4 pos_vs = mul(pos_ws, View); 
float4 pos_ps = mul(pos_vs, Projection); 

我改變代碼做同樣的事情(而不是傳遞在一個單一的WorldViewProjection矩陣),我的着色器使用它來計算一個位置,然後只給像素應用一種顏色。然而,沒有什麼是渲染

我很堅持這一點,我通過了基本的3D,但通過確定似乎並沒有削減它! :)

回答

1

所以事實證明,這個問題相當簡單!

我最初實際上刪除了這個問題,因爲我知道這個問題可能是我的矩陣,所以我不太可能得到很多幫助!

經過谷歌的磕磕絆絆,還有​​比我想承認的更多的咖啡,我找到了答案。
XNA轉換它的狡猾,並不告訴你!我試圖將觀看和投影矩陣轉換成一些虛幻的希望,我會知道我在做什麼,但沒有幫助。

相反,我現在傳入一個單獨的WorldViewProjection_Transposed矩陣,該矩陣使用以下方法進行計算。

Matrix worldViewProjection_Transpose = Matrix.Transpose(world * view * projection); 

這似乎在此刻的工作,我希望它是這麼簡單。

我相信我會遇到更多的問題,因爲我需要渲染的模型變得更加複雜,但我決定離開這個以防萬一類似情況(和經驗水平)的任何人遇到困難:)