Реализация системы фиксированных координат в OpenGL - PullRequest
1 голос
/ 24 августа 2010

Простая версия моего проекта - вращение сферы на основе пользовательского ввода.

Однако мои повороты становятся странными после нескольких поворотов в определенных ситуациях из-за локальной системы координат openGL. Что мне действительно нужно, так это вращаться на основе фиксированной системы координат мира. Так, что когда я вращаю сферу, ее оси вращения тоже не вращаются. Эта проблема объяснена здесь http://www.opengl.org/resources/faq/technical/transformations.htm в 9.070.

Я все это понимаю. Однако настройка того, что они предлагают, немного выше моего уровня квалификации. У кого-нибудь есть опыт с этим? Я попытался с помощью кода, который я нашел здесь http: // chaosengineer.com/?cat=19 но не повезло.

Вот основной код, который я использую.

glPushMatrix();

//draw in middle of the screen
glTranslatef(ofGetWidth()/2,ofGetHeight()/2,0);

glRotatef(xRot,1,0,0);
glRotatef(zRot,0,0,1);

glTranslatef(-ofGetWidth()/2,-ofGetHeight()/2,0);

ofSetColor(255, 255, 255, 255);
squirrelModel.draw();
glPopMatrix();

1 Ответ

2 голосов
/ 24 августа 2010

Вам необходимо сохранить объект Ориентация в виде матрицы.Или как набор векторов (локальный X, локальный Y, локальный Z).

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

В этом случае при рендеринге вместо glRotate / glTranslate вам нужно использовать glMultMatrix.

Или использовать кватернионы,

Я понимаю, что это не полный ответ, но (хотя я написал библиотеки и код для этого), объяснение этого займет много времени.

Попробуйте загрузить NVidiaОткройте OpenGL SDK и посмотрите, как они обрабатывают вращение объектов в своих демонстрациях.Также ищите 3D ориентация с Google.В некоторых статьях должно быть объяснено, как хранить ориентацию объекта с использованием матриц и т. Д.

И отметьте euclidianspace.com

...