Как изменить центр вращения в OpenGL

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

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

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


person RexOnRoids    schedule 15.07.2009    source источник
comment
Не могли бы вы также показать нам код, который рисует машину?   -  person finnw    schedule 15.07.2009


Ответы (3)


Конечно. Переведите объект вниз. ТОГДА поверните его.

person Goz    schedule 15.07.2009
comment
Я не могу изменить положение модели из-за ограничений в игре. Так что я не могу перевести. Я ОБНОВЛЯЮ с каким-нибудь источником через секунду .. - person RexOnRoids; 15.07.2009
comment
Переместите его так, чтобы точка, которую вы хотите повернуть, находилась в начале координат, затем поверните, а затем переместите его в нужное место. - person jcoder; 15.07.2009
comment
@Джон, это заставит его вращаться вокруг нового начала координат, а не вращаться вокруг себя (думаю, год вместо дня). - person R. Martinho Fernandes; 15.07.2009
comment
Перевести ›› ПОВЕРНУТЬ ›› Перевести Назад РАБОТАЕТ. Спасибо! - person RexOnRoids; 15.07.2009

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

person Henry    schedule 19.07.2009
comment
Когда он говорил о центре вращения меша, вы определенно можете перевести это, а затем повернуть вокруг нового источника меша. (см. принятый ответ) - person Grant Peters; 19.07.2009
comment
Принятый ответ говорит: перевести относительно начала мира, повернуть, а затем перевести обратно. Именно то, что я говорил. Если вы не понимаете, как работает OpenGL, я не могу вам помочь. - person Henry; 20.07.2009

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

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

person R. Martinho Fernandes    schedule 15.07.2009