SharpDX如何在矩阵旋转后校正顶点位置
SharpDX how to correct vertex positions after matrix rotation
我正在从 Vector3 获取二维坐标。我必须纠正位置以获得正确的结果。确实,我似乎得到了这样的正确位置,但我不知道如何在旋转时更正位置。
这里是我的 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);
}
如何纠正旋转位置?
如果可以的话,post 关于 "correct positions" 的更多信息。我会尝试一下,假设您想将顶点移动到世界 space,然后算出它占用的像素。
通常您的订单乘以
平移 * 旋转 * 缩放;
如果你想让Viewprojection正确应用,我相信它应该在开头。 V * (t * r * s).
gamedev stackexchange 上的以下 link 对此进行了介绍。 matrix order
此外,您的项目采用了一个已经乘以 wvp 矩阵的 Vector3,我没有看到您在 convert_3dto2d 函数中乘以它。
基本上,在您的原始顶点上执行 TRS 矩阵乘法,然后乘以您的 WVP 矩阵,然后执行您的项目。然后您将获得屏幕 space 像素。
我正在从 Vector3 获取二维坐标。我必须纠正位置以获得正确的结果。确实,我似乎得到了这样的正确位置,但我不知道如何在旋转时更正位置。
这里是我的 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);
}
如何纠正旋转位置?
如果可以的话,post 关于 "correct positions" 的更多信息。我会尝试一下,假设您想将顶点移动到世界 space,然后算出它占用的像素。
通常您的订单乘以
平移 * 旋转 * 缩放;
如果你想让Viewprojection正确应用,我相信它应该在开头。 V * (t * r * s).
gamedev stackexchange 上的以下 link 对此进行了介绍。 matrix order
此外,您的项目采用了一个已经乘以 wvp 矩阵的 Vector3,我没有看到您在 convert_3dto2d 函数中乘以它。
基本上,在您的原始顶点上执行 TRS 矩阵乘法,然后乘以您的 WVP 矩阵,然后执行您的项目。然后您将获得屏幕 space 像素。