0

这是我在转换(网格)时不理解的东西。请先看看我的代码(在 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 在它们之间切换)。“移动”是我在键盘上选择每个箭头后更改的向量(因此我可以移动活动对象)。

但它没有按我的意愿工作。...如果我更改了我的一个对象的位置...然后在切换到另一个(更改 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

那我的问题是什么?有任何想法吗:)?啊哈...问题与该正在更改的MeshColor 功能无关...我检查了。

4

1 回答 1

0

Ech ......它在改变后开始工作:

obj.GeometryMatrix.Translate(this.move);

至:

obj.GeometryMatrix *= Matrix.Translation(this.move);

……但这是为什么呢?我真的不知道...... Translate() 应该改变我的矩阵,而不是设置为翻译(就像它所做的那样)

于 2010-03-10T01:57:05.090 回答