2012-02-22 2 views
0

Я пытаюсь повернуть объект вокруг его центра со следующим кодом:Вращающийся объект в OpenGL ES - Правильный порядок применения преобразований? iPhone

-(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(); 


} 

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

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

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

ответ

0

Необходимо сначала повернуть, а затем перевести в нужное место.

+0

Как? Матрица (matricesArray) также содержит данные о положении и ротации? – GuybrushThreepwood

+0

do glRotatef before glTranslatef – ggfela

+0

Все еще не работает - я думаю, что проблема с командой glmultmatrix. – GuybrushThreepwood

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