我从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);
}
如何纠正旋转位置?
答案 0 :(得分:0)
如果可以,请发布更多有关"更正位置的信息"。我将对此进行一次尝试并假设您想要将顶点移动到世界空间中,然后计算它占据的像素。
通常您订购的产品乘以
翻译*旋转*缩放;
如果你想正确应用Viewprojection,我相信它应该在一开始。 V *(t * r * s)。
gamedev stackexchange上的以下链接就是这个。 matrix order
此外,你的项目接收了一个已经成倍增加到wvp矩阵的Vector3,我没有看到你在convert_3dto2d函数中增加了它。
基本上,在原始顶点上执行TRS矩阵乘法,然后乘以WVP矩阵,然后执行项目。然后,您将获得屏幕空间像素。