2009-07-15 3 views
4

У меня есть 3D модель (OpenGL ES 1.1 iPhone SDK v3.0) это довольно сложная (т.е. тысячи Вершины и лица), и я хотел бы для поворота этой модели вокруг оси Y в центре или вблизи центра. Проблема в том, что glRotate поворачивает мою модель вокруг точки в/около центра одного из его нижних краев, а не рядом с центром модели. Представьте себе, что автомобиль водит очень плотные круги вокруг светового столба, и это в основном то, что у меня есть. Я хочу, чтобы автомобиль был приколот к свету и вращался вокруг него. (Ниже Некоторые источники)Как изменить положение центра вращения в OpenGL

// BLUE BLOCK---------------------------------------------- 
    glPushMatrix(); 
    { 
     glTranslatef(blueLocation[0], blueLocation[1], blueLocation[2]); 
     glRotatef(blueRotAngle, 0.0, 0.0, 1.0); 
     ... 

ВОПРОС:
есть простой способ изменить центр вращения в OpenGL?

+0

Не могли бы вы также показать нам код, который рисует автомобиль? – finnw

ответ

9

Несомненно. Переведите объект вниз. Затем поверните его.

+0

Я не могу переопределить модель из-за ограничений в игре. Поэтому я не могу перевести. Я ОБНОВЛЯЮ с некоторым источником в секунду. – RexOnRoids

+0

Перевести его так, чтобы точка, которую вы хотите вращать, находится в начале координат, затем поверните ее, а затем переведите в нужное место. – jcoder

+0

@John, который сделает его орбитой нового происхождения, а не вращается вокруг «самого себя» (думаю, год вместо дня). –

1

Вы должны использовать вашу модель API для изменения модели происхождения. Если бы вы могли сказать, какой из них вы используете, возможно, я смогу помочь еще немного.

Если у вас есть доступ к программному обеспечению, которое может редактировать вашу модель, вы можете исправить это непосредственно в файле модели и удалить любые хаки из вашего кода.

1

Следует помнить, что все операции в OpenGL выполняются относительно начала координат. Вы не можете «изменить центр вращения в OpenGL». Вы перемещаете мир относительно этого происхождения.

+0

Говоря о центре вращения сетки, вы можете определенно перевести это, а затем повернуть вокруг нового «происхождения» сетки. (см. принятый ответ) –

+0

Принятый ответ говорит о переводе по отношению к мировому происхождению, повернуть, а затем перевести назад. Именно то, что я говорил. Если вы не понимаете, как работает OpenGL, я не могу вам помочь. – Henry

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