我的問題是我在世界空間中有一個表面(三個3D點),我想要旋轉以使得這三個點的結果法線相同作爲另一架飛機的法線,同時保持原始曲面的「三角形」。旋轉平面所以它的法線與另一個平面的正常方向相同
如果 「目的地」 平面具有正常的(0,0,1)和在該平面上的點是(0,0,0),並且 「源」 點是[-0.5,-0.5, -0.5] [-0.5,-0.5,0.5] [-0.5,0.5,0.5],我必須做些什麼計算來旋轉這些點,使表面法線變成(0,0,1)?
我曾嘗試使用下面的方法「projectPointToPlane」簡單的「突出」的「源」點到「目的地」飛機:
public static Vector3f projectPointToPlane(Vector3f point, Vector3f planePoint, Vector3f planeNormal)
{
float dot = EEngineUtils.getDotProduct(EEngineUtils.getProjectionVector(point, planePoint), planeNormal);
return new Vector3f(point.getX()+planeNormal.getX()*-dot, point.getY()+planeNormal.getY()*-dot, point.getZ()+planeNormal.getZ()*-dot);
}
public static Vector3f getProjectionVector(Vector3f to, Vector3f from)
{
return new Vector3f(to.getX()-from.getX(), to.getY()-from.getY(), to.getZ()-from.getZ());
}
public static float getDotProduct(Vector3f v1, Vector3f v2)
{
return (v1.getX()*v2.getX())+(v1.getY()*v2.getY())+(v1.getZ()*v2.getZ());
}
但是我沒有得到我所期待的結果。 例如,下面是源碼點:
Vector3f [-0.5,-0.5,-0.5] | Vector3f [-0.5,-0.5,0.5] | Vector3f [-0.5,0.5,0.5]
這裏所得的投影的點:
Vector3f [-0.5,-0.5,0.0] | Vector3f [-0.5,-0.5,0.0] | Vector3f [-0.5,0.5,0.0]
前兩個結果是相同的,這不是我想要的。我希望得到的'三角形'的形狀相同(在這種情況下,是一個直角三角形)。 我的假設是'投影'不是我所需要的,而我真正需要的是某種「旋轉」,但我不知道如何實現這一點。
我想過要找到兩個曲面法線之間的角度並以這個角度旋轉點,但我不知道用什麼'軸'向量來旋轉。 任何幫助,將不勝感激。如果我太模糊,請讓我知道。
注意我在Java中使用LWJGL API。