2012-07-19 149 views
1

我正在嘗試使用lwjgl Matrix4f類旋轉頂點。我想這樣的代碼:使用變換矩陣旋轉頂點

float rotY = (float) Math.toRadians(180); 

    Matrix4f transMat = new Matrix4f(); 
    transMat.rotate(rotY, new Vector3f(0.0f, 1.0f, 0.0f)); 
    transMat.translate(new Vector3f(1.0f, 0.0f, 0.0f)); 

    Vector4f vecPosMod = new Vector4f(1.0f, 0.0f, 0.0f, 1.0f); 
    Matrix4f.transform(transMat, vecPosMod, vecPosMod); 

應該旋轉Vector3f(1.0f, 0.0f, 0.0f) 180度可惜所有的計算後vecPosMod是(-2.0, 0.0, 1.7484555E-7, 1.0)。我希望它是(-1.0, 0.0, 0.0, 1.0)。怎麼樣?

回答

1

您正在旋轉後沿着X軸將轉換應用於矩陣。 這是執行旋轉後沿X軸平移一個單位的位置,導致-2.0而不是-1.0。

試試這個:

float rotY = (float) Math.toRadians(180); 

    Matrix4f transMat = new Matrix4f(); 
    transMat.rotate(rotY, new Vector3f(0.0f, 1.0f, 0.0f)); 

    Vector4f vecPosMod = new Vector4f(1.0f, 0.0f, 0.0f, 1.0f); 
    Matrix4f.transform(transMat, vecPosMod, vecPosMod); 

它提供了以下結果:

(-1.0 0.0 8.742278E-8 1.0) 

的8.742278E-8可能是因爲接近0.0,你可以得到應用在彩車的旋轉變換後java的。