2017-03-04 169 views
-1

我目前正在研究物理引擎和渲染引擎之間的中間體。我的物理引擎需要一系列力量和位置並返回一個四元數。旋轉矩陣問題

我目前正在使用我以前的問題(這是工作正常)的答案將該四元數轉換爲旋轉矩陣。我的座標系統是z - 進入屏幕,y向上和x向右。

現在畢竟,我一直在測試通過旋轉一個單一的軸。我可以繞y軸和z軸旋轉,沒有任何問題。但是,當我嘗試圍繞z軸旋轉時,系統產生了一個奇怪的結果。旋轉很好,但旋轉時,物體會在z方向變平(即:負縮放),然後「翻轉」並返回到滿刻度。它每90度就會這樣做,與基本方向相差45度。

這是我的代碼,我的四元數轉換爲旋轉矩陣:

Matrix4f output = new Matrix4f(); 
    output.setIdentity(); 

    if(input.length()!=0){ 
    input.normalise(); 
    } 

    float xx = input.x * input.x; 
    float xy = input.x * input.y; 
    float xz = input.x * input.z; 
    float xw = input.x * input.w; 

    float yy = input.y * input.y ; 
    float yz = input.y * input.z; 
    float yw = input.y * input.w; 

    float zz = input.z * input.z; 
    float zw = input.z * input.w; 


    output.m00 = 1 -2*((yy+zz)); 
    output.m01 = 2*(xy+zw); 
    output.m02 = 2*(xz-yw); 

    output.m10 = 2*(xy-zw); 
    output.m11 = 1 - (2*(xx+zz)); 
    output.m12 = 2*(yz+xw); 

    output.m20 = 2*(xz+yw); 
    output.m21 = 2*(yz+xw); 
    output.m22 = 1-(2*(xx+yy)); 

現在,我在實時爲對象的旋轉查看此,我看什麼,不應該存在。此外,這直接傳遞給opengl,所以它超出了我爲什麼我應該有這個問題。有任何想法嗎?

回答

1

output.m21 = 2*(yz+xw);應該是output.m21 = 2*(yz-xw);

+0

釘它,太感謝你了。 – Peter