我最近一直在尝试使用XNA在Silverlight 5中创建一些3D渲染代码。不幸的是,我一直无法使用任何东西(使用我的自定义着色器)来工作。
基本效果用于立方体并仅使用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上通过确定但是传递确定似乎没有削减它! :)
答案 0 :(得分:1)
事实证明问题相当简单!
我最初删除了这个问题,因为我知道问题很可能是我的矩阵,所以我不太可能得到很多帮助!
在谷歌遇到一些磕磕绊绊之后,咖啡多于我想承认的咖啡,我找到了答案。
XNA转发它的狡猾的基础,并没有告诉你!我曾试图将视图和投影矩阵转换成一些徒劳的希望,我知道我在做什么,但它没有帮助。
相反,我现在传入一个WorldViewProjection_Transposed矩阵,该矩阵使用以下方法计算。
Matrix worldViewProjection_Transpose = Matrix.Transpose(world * view * projection);
这似乎目前有效,我希望这很简单。
我确信我会遇到更多的问题,因为我需要渲染的模型变得更加复杂但是我决定留下这个以防万一在类似情况(和经验水平)的人都在努力:)< / p>