2012-02-16 13 views
0

iPhoneでopenglを使っていくつかの作業をしていますが、私は特定の時点で固執しています。インターネット上のすべてのコードサンプルは、x軸、y軸、またはz軸について行列をどのように回転させることができるのかを示していますが、任意の点について行列をどのように回転させることができるのかについては誰も話しません。iPhone OpenGL es:ポイントについての行列を回転する

私はopen gl es 2.0を使用しています。どんな助けもありがとう。

よろしく、

答えて

1

あなたがそれらの軸の一つの周りを回転するが、異なる時点での行列を構築する方法を求めているように聞こえます。それを行う方法は、最初にその点に平行移動し、次に望む軸の回転を適用することです。行列の乗算の順序は、軸を移動するかジオメトリと考えるかによって異なります。

あなたはが同時にで任意のx、y、zの角度の回転を行うことができるようにしたい場合は、行列がin this article議論使用することができますのようになりました

static inline void Matrix3DSetRotationByRadians(Matrix3D matrix, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) 
{ 
    GLfloat mag = sqrtf((x*x) + (y*y) + (z*z)); 
    if (mag == 0.0) 
    { 
     x = 1.0; 
     y = 0.0; 
     z = 0.0; 
    } 
    else if (mag != 1.0) 
    { 
     x /= mag; 
     y /= mag; 
     z /= mag; 
    } 

    GLfloat c = cosf(angle); 
    GLfloat s = fastSinf(angle); 
    matrix[3] = matrix[7] = matrix[11] = matrix[12] = matrix[13] = matrix[14] = 0.0; 
    matrix[15] = 1.0; 


    matrix[0] = (x*x)*(1-c) + c; 
    matrix[1] = (y*x)*(1-c) + (z*s); 
    matrix[2] = (x*z)*(1-c) - (y*s); 
    matrix[4] = (x*y)*(1-c)-(z*s); 
    matrix[5] = (y*y)*(1-c)+c; 
    matrix[6] = (y*z)*(1-c)+(x*s); 
    matrix[8] = (x*z)*(1-c)+(y*s); 
    matrix[9] = (y*z)*(1-c)-(x*s); 
    matrix[10] = (z*z)*(1-c)+c; 

} 
+0

をI CA3dTransformsを使用してローテーションを実行しています。それは今のところ働いていますが、私はそれがバンドの援助の解決であると感じています。 – Abhi

+0

私はそれを得ると思います....しかし、私は2つの質問があります。(a)特定のジオメトリの行列表現を持つとき、それは正確に何を意味しますか?私は行列が物理的なスクリーン座標に絶対に関係していないと推測しています。 (b)行列が単なる表記である場合、どのようにポイントに変換するのですか? – Abhi

関連する問題