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