Xna将3D坐标转换为2D屏幕坐标

时间:2013-07-19 18:16:31

标签: 3d xna 2d

我知道其他人已经问过这个,但我想知道是否有一个非常好的功能可用于将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),但是方形没有出现。

1 个答案:

答案 0 :(得分:1)

XNA有一个内置函数来为您处理:

            graphics.GraphicsDevice.Viewport.Unproject(MyVector3Location, camera.ProjectionMatrix, camera.ViewMatrix, camera.WorldMatrix);