SharpDX如何在矩阵旋转后校正顶点位置

时间:2017-06-15 14:30:48

标签: c# rotation sharpdx

我从Vector3获得了2d坐标。我必须纠正立​​场以获得正确的结果。事实上,我似乎得到了这样的正确位置,但我不知道如何在旋转时纠正位置。

这是我的worldViewMatrix,我做了操作,但那些操作没有传递给我的VertexData,然后我尝试纠正位置。

WorldViewMatrix =  Matrix.Scaling(Scale) * Matrix.RotationX(Rotation.X) * Matrix.RotationY(Rotation.Y) * Matrix.RotationZ(Rotation.Z) * Matrix.Translation(Position.X, Position.Y, Position.Z) * viewProj;

我试图纠正它:

        public Vector2 Convert_3Dto2D(Vector3 position, Vector3 translation, Vector3 scale, Vector3 rotation, Matrix viewProj, RenderForm_EX form)
        {position += translation;


        position += translation;
        position = Vector3.Multiply(position, scale);
        //ROTATION ?

            var project = Vector3.Project(position, 0, 0, form.ClientSize.Width, form.ClientSize.Height, 0, 1, viewProj);

            Console.WriteLine(project.X+" "+ project.Y);
            return new Vector2(project.X, project.Y);
        }

如何纠正旋转位置?

1 个答案:

答案 0 :(得分:0)

如果可以,请发布更多有关"更正位置的信息"。我将对此进行一次尝试并假设您想要将顶点移动到世界空间中,然后计算它占据的像素。

通常您订购的产品乘以

翻译*旋转*缩放;

如果你想正确应用Viewprojection,我相信它应该在一开始。 V *(t * r * s)。

gamedev stackexchange上的以下链接就是这个。 matrix order

此外,你的项目接收了一个已经成倍增加到wvp矩阵的Vector3,我没有看到你在convert_3dto2d函数中增加了它。

基本上,在原始顶点上执行TRS矩阵乘法,然后乘以WVP矩阵,然后执行项目。然后,您将获得屏幕空间像素。