Вращающийся объект в OpenGL ES - правильный порядок применения преобразований?iPhone - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь повернуть объект вокруг его центра следующим кодом:

-(void)render
{
// clear the matrix
glPushMatrix();
glLoadIdentity();

// move to my position

//scale
glScalef(0.000015, 0.000015, 0.000015);

xRotation =280.0;
zRotation =1.0;
yRotation +=0.5;

glRotatef(xRotation, 1.0f, 0.0f, 0.0f);
glRotatef(yRotation, 0.0f, 1.0, 0.0f);
glRotatef(zRotation, 0.0f, 0.0f, 1.0f);

[mesh render];

//restore the matrix
glPopMatrix();

}

Этот код работает правильно, и объект вращается вокруг центра.Проблема в том, что у меня также есть матрица, которая определяет начальную позицию объекта в сцене с именем matricesArray.Я добавил новую строку в свой код, чтобы умножить на эту матрицу и поместить объект в правильное начальное положение:

-(void)render
{
// clear the matrix
glPushMatrix();
glLoadIdentity();

// move to my position

//xRotation = 280;

//scale
glScalef(0.000015, 0.000015, 0.000015);

xRotation =280.0;
zRotation =1.0;
yRotation +=0.5;

glRotatef(xRotation, 1.0f, 0.0f, 0.0f);
glRotatef(yRotation, 0.0f, 1.0, 0.0f);
glRotatef(zRotation, 0.0f, 0.0f, 1.0f);

glMultMatrixf(matricesArray);  //This is the line I have added to apply the matrix.

[mesh render];

//restore the matrix
glPopMatrix();


}

Проблема в том, что объект теперь вращается в широком круге вокруг экрана.

Мой вопрос: каков правильный порядок применения матрицы в моем коде?

Заранее спасибо.

1 Ответ

0 голосов
/ 22 февраля 2012

Вам нужно сначала повернуть, а затем перевести в нужное место.

...