2012-02-16 3 views
0

Я делаю некоторую работу с opengl на iPhone, и я застрял в определенной точке. Все образцы кода в Интернете показывают вам, как матрицу можно вращать вокруг оси x, оси y или оси z, но никто не говорит о том, как матрицу можно вращать вокруг произвольной точки?iPhone opengl es: вращайте матрицу около точки

Я использую open gl es 2.0. Любая помощь будет оценена по достоинству.

С уважением,

ответ

1

Это звучит, как вы спрашиваете, как построить матрицу, которая вращается вокруг одной из этих осей, но в другом месте. То, как вы это делаете, это сначала перевести на эту точку, а затем применить поворот для нужной оси. Порядок умножения матриц зависит от того, считаете ли вы его движущимися осями или геометрией.

Если вы также хотите быть в состоянии сделать поворот любых х, у, г угол одновременно, вы можете использовать матрицу обсуждали 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

+0

Хорошо, я думаю, что получаю это. Но у меня есть 2 вопроса (a) Когда у меня есть представление матрицы для определенной геометрии, что это значит точно. Я предполагаю, что матрица абсолютно не связана с физическими координатами экрана. (б) Как преобразовать в точку, если матрица является просто представлением. – Abhi

Смежные вопросы