2

我知道其他人问过这个问题,但我想知道是否有一个非常好的函数可以用来将 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),但正方形没有出现。

4

1 回答 1

1

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

            graphics.GraphicsDevice.Viewport.Unproject(MyVector3Location, camera.ProjectionMatrix, camera.ViewMatrix, camera.WorldMatrix);
于 2013-07-19T18:27:57.483 回答