0

我最近一直在尝试使用 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 上通过了,但通过了似乎并没有削减它!:)

4

1 回答 1

1

所以事实证明这个问题相当简单!

实际上我最初删除了这个问题,因为我知道这个问题很可能是我的矩阵,所以我不太可能得到太多帮助!

在谷歌上磕磕绊绊,喝了比我想承认的更多的咖啡后,我找到了答案。
XNA 偷偷地转置它的矩阵并且不告诉你!我曾尝试转置视图和投影矩阵,但徒劳无功,希望我知道自己在做什么,但这没有帮助。

相反,我现在传入一个使用以下公式计算的 WorldViewProjection_Transposed 矩阵。

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

目前这似乎可行,我希望它很简单。

我确信我会遇到一百万个问题,因为我需要渲染的模型变得更加复杂,但我决定保留它,以防遇到与我类似情况(和经验水平)的任何人都在苦苦挣扎:)

于 2012-09-17T16:09:12.063 回答