我知道其他人已经问过这个,但我想知道是否有一个非常好的功能可用于将3D点转换为2D点。我自己试了一下,但是没用。我用过:
protected Vector2 ScreenCoords(Vector3 v, Matrix viewMatrix, Matrix projectionMatrix)
{
Matrix viewProj = viewMatrix * projectionMatrix;
float w = viewProj.M14 * v.X + viewProj.M24 * v.Y + viewProj.M34 * v.Z + viewProj.M44;
return new Vector2(
(viewProj.M11 * v.X + viewProj.M21 * v.Y + viewProj.M31 * v.Z + viewProj.M41) / w,
(viewProj.M12 * v.X + viewProj.M22 * v.Y + viewProj.M32 * v.Z + viewProj.M42) / w);
}
这是对的吗?难道我做错了什么?我尝试在原点放置一个正方形,并将相机放在(10,10,10),并指向(0,0,0),但是方形没有出现。
答案 0 :(得分:1)
XNA有一个内置函数来为您处理:
graphics.GraphicsDevice.Viewport.Unproject(MyVector3Location, camera.ProjectionMatrix, camera.ViewMatrix, camera.WorldMatrix);