iPhone opengl es:围绕一个点旋转矩阵

时间:2012-02-16 15:27:29

标签: iphone opengl-es

我在iPhone上使用opengl es做了一些工作,我陷入了困境。互联网上的所有代码示例都向您展示了如何围绕x轴,y轴或z轴旋转矩阵,但没有人谈论矩阵如何围绕任意点旋转?

我正在使用open gl es 2.0。任何帮助将不胜感激。

此致

1 个答案:

答案 0 :(得分:1)

听起来你问的是如何构建一个围绕其中一个轴旋转的矩阵,但是在不同的点上。这样做的方法是先转换到该点,然后对所需的轴应用旋转。矩阵的乘法顺序取决于您是将其视为轴移动还是几何。

如果希望能够同时旋转任意x,y,z角度 ,则可以使用所讨论的矩阵{{3 }}:

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;

}