Understanding DirectX
本文关键字:DirectX Understanding | 更新日期: 2023-09-27 17:58:23
// 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。为什么?
第一个三角形沿Z轴旋转的原因是,您在上一个函数中设置了旋转,它会一直保留到更改为止。绘制后,您将其更改为沿Y轴旋转,然后绘制第二个三角形。然后,再次将矩阵设置为沿Z轴旋转,整个过程重新开始。
你没有添加到以前在device.Transform.World
中的旋转,你只是重置它。如果你想将它们相加,你必须将它们相乘。
如果要组合多个转换,则应该执行矩阵多路复用。也就是说,您的最后一个命令应该是device.Transform.World *= Matrix.RotationZ(angle += 0.05f);
。您的代码只是将沿Y轴的旋转替换为沿Z轴的旋转。顺便说一句,应该首先应用转换,然后才渲染基本体(而不是相反(。
您应该能够在网上找到许多详细的转换教程。