0
//          Draw primitives
        device.VertexFormat = CustomVertex.PositionColored.Format;
        device.DrawUserPrimitives(PrimitiveType.TriangleFan, 4, verts);

        device.Transform.World = Matrix.RotationY(angle += 0.05f);

        //          Draw primitives
        device.VertexFormat = CustomVertex.PositionColored.Format;
        device.DrawUserPrimitives(PrimitiveType.TriangleFan, 4, verts);

        device.Transform.World = Matrix.RotationZ(angle += 0.05f);

我无法理解Transform.World。我如何理解(这将是合乎逻辑的)您绘制第一个三角形并旋转 Y...然后绘制第二个三角形并将两个三角形都旋转到 Z 轴。此代码有效 => 一个三角形仅旋转 Y,第二个只有Z。为什么?

4

2 回答 2

0

如果要组合多个转换,则应该执行矩阵乘法。也就是说,您的最后一个命令应该是device.Transform.World *= Matrix.RotationZ(angle += 0.05f);. 您的代码只是将沿 Y 的旋转替换为沿 Z 轴的旋转。而且,顺便说一句,您应该首先应用转换,然后才渲染图元(而不是相反)。

您应该能够在线找到许多详细的转换教程。

于 2013-02-09T13:27:16.900 回答
0

第一个三角形沿 Z 轴旋转的原因是因为您在之前的函数中设置了旋转,并且在您更改它之前它会一直保留。画完之后,将其更改为沿 Y 轴旋转,然后绘制第二个三角形。然后将矩阵再次设置为沿 Z 轴旋转,整个过程重新开始。

您没有添加到之前的轮换中device.Transform.World,您只是在重置它。如果要将它们加在一起,则必须将它们相乘。

于 2013-02-09T15:02:30.707 回答