2012-02-16 77 views
0

我正在做一些与iPhone上的opengl工作,我被困在一个特定的点。互联网上的所有代码示例都向您展示了矩阵如何围绕x轴,y轴或z轴旋转,但没有人谈论矩阵如何绕任意点旋转?iPhone的开放:关于一个点旋转矩阵

我正在使用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

截至目前我已经使用CA3dTransforms来做旋转。它现在的作品,但我有一种感觉,它是一个乐队援助解决方案。 – Abhi 2012-02-16 21:16:35

+0

好吧我想我明白了....但我有2个问题(a)当我有一个特定几何的矩阵表示时,它究竟意味着什么。我猜测矩阵绝对与物理屏幕坐标无关。 (b)如果矩阵只是一种表示,我该如何翻译成某一点。 – Abhi 2012-02-17 17:25:41