这是我对变换(网格)时不理解的东西。请先看一下我的代码(在Render()函数中):
foreach (GeometricObject obj in this.objects)
{
if (obj != this.activeObject)
{
obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Yellow, device);
}
else
{
obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Green, device);
obj.GeometryMatrix.Translate(this.move);
}
device.Transform.World = obj.GeometryMatrix;
obj.Mesh.DrawSubset(0);
}
说明: 我有一些黄色gometriObjects(网格)和一个绿色activeObject(我可以通过键盘1-4在它们之间切换)。 'move'是我在键盘上选择每个箭头后更改的向量(因此我可以移动活动对象)。
但它不能按我的意愿工作。 ...如果我改变了我的一个物体的位置...然后切换到另一个(改变activeObject)后,我在屏幕上看到了另一个视图(在所有开关之后......所有物体都在同一个地方)屏幕;/)。为什么它一直不是同一个观点?我认为......它应该,因为我已经设置了相同的视图:
device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 2.0f, -25.0f), // Camera position
new Vector3(0.0f, 0.0f, 0.0f), // Look-at point
new Vector3(0.0f, 1.0f, 0.0f)); // Up vector
那我的问题是什么?有任何想法吗:)? 啊啊...问题与那个changingMeshColor函数无关......我查了一下。
答案 0 :(得分:0)
Ech ....改变后开始工作:
obj.GeometryMatrix.Translate(this.move);
为:
obj.GeometryMatrix *= Matrix.Translation(this.move);
......但为什么呢?我真的不知道... Translate()应该改变我的矩阵,而不是设置为翻译(就像它一样)