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