iPhone opengl es: повернуть матрицу вокруг точки - PullRequest
0 голосов
/ 16 февраля 2012

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

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

С уважением,

1 Ответ

1 голос
/ 16 февраля 2012

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

Если вы также хотите сделать вращение произвольной x, y,угол z в то же время , вы можете использовать матрицу, рассмотренную в этой статье :

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;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...