2
我知道其他人已经问过这个问题,但我想知道是否有一个非常好的函数可用于将3D点转换为2D点。我自己试了一下,但没有奏效。我用过:Xna将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),但方块没有出现。
但这只是给我出的Vector3。如果可能的话,我需要采用3D坐标并将其转换为2D坐标(Vector3转换为Vector2)。 – pjrader1
@cakeisajoke - 这是2D屏幕坐标,我不知道它为什么会返回为Vector3。就像'Vector3 myVec = ..Unproject(..);'和'Vector2 Location = new Vector2(myVec.X,myVec.Y);' – mcmonkey4eva
第三个变量用于存储深度,这就是3D引擎所做的,使用此信息对样品进行分类。但是,如果你放弃了2d的价值。 – joojaa