Directx 在活动对象之间切换-了解变换/视图

Directx 在活动对象之间切换-了解变换/视图,directx,direct3d,mesh,Directx,Direct3d,Mesh,这是我在变换网格时不理解的。请先看一下我在渲染函数中的代码: foreach (GeometricObject obj in this.objects) { if (obj != this.activeObject) { obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Yellow, de

这是我在变换网格时不理解的。请先看一下我在渲染函数中的代码:

            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功能无关…我已检查。

Ech…更改后开始工作:

obj.GeometryMatrix.Translate(this.move);
致:


……但这是为什么?我真的不知道。。。Translate应该更改我的矩阵,而不是像它那样设置为Translate

我已经读了好几遍了,我仍然不知道你的问题是什么。AFAICT视图矩阵从不更改,但可以更改对象位置这一事实意味着相机可能不会查看给定对象。在后一段代码中,您通过移动定义的平移矩阵变换矩阵。在前者中,您创建的是翻译矩阵。前者覆盖矩阵中已有的任何内容。
obj.GeometryMatrix *= Matrix.Translation(this.move);