OpenGL ES: вращающаяся 3d модель вокруг себя - PullRequest
2 голосов
/ 09 августа 2010

Я играю с OpenGL ES на iPhone и пытаюсь повернуть модель с помощью панорамирования пальцем.Я обнаружил приложение с открытым исходным кодом Molecules, которое позволяет вам делать это, и я смотрю на этот код, но когда дело доходит до поворота моей модели, я могу поворачивать его только вокруг точки, удаленной в пространстве (как это было в прошлом).на орбите, как спутник, и я фиксированная планета).Любое предложение о том, что может быть не так?Я могу опубликовать код позже, может быть, по требованию (много строк) По большей части см. Молекулы, вы можете найти его здесь МОЛЕКУЛ

Ответы [ 2 ]

4 голосов
/ 09 августа 2010

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

Я думаю, что есть функция glTranslate (), скажем, объект в 1,0,0.Затем вы должны перевести -1,0,0, чтобы перейти к началу координат.Это переводится вектором, идущим из центра объекта в начало координат.

3 голосов
/ 09 августа 2010

Код отрисовки, вероятно, выглядит примерно так:

glLoadIdentity();
glTranslate(0, 0, -10);
glRotate(...);
drawMolecule();

Теперь важно понимать, что эти преобразования применяются в обратном порядке. Если в drawMolecule мы указываем вершину, то эта вершина будет сначала вращаться вокруг оси, заданной для glRotate (которая по определению проходит через локальное начало координат молекула), и , затем будет переведено на 10 единиц в направлении -z.

Это имеет смысл, потому что glTranslate по сути означает: "переводить все, что будет после этого". Это включает в себя сам вызов glRotate, поэтому результат поворота также переводится. Если бы вызовы были отменены, то результат перевода был бы повернут, что привело бы к вращению вокруг оси, которая больше не проходит через начало координат.

Итог: чтобы повернуть объект вокруг его локального источника, поместите glRotate call last .

...