Я играю с OpenGL ES на iPhone, и я пытаюсь повернуть модель путем панорамирования пальцем. Я обнаружил приложение Molecules с открытым исходным кодом, которое позволяет вам это делать, и я смотрю на этот код, но когда дело доходит до поворота моей модели, я могу повернуть ее только в точке, находящейся далеко в пространстве (например, это было на орбите как спутник, и я - неподвижная планета). Любое предложение о том, что может быть неправильным? я могу отправить код позже, может быть, по запросу (количество строк) По большей части относятся к молекулам вы можете найти его здесь MOLECULESOpenGL ES: Вращающаяся 3d модель вокруг себя
ответ
Если мне не изменяет память правильно, я думаю, вам нужно перевести модель в происхождение, поворот, а затем переведите обратно в исходное положение, чтобы получить эффект, который вам нужен.
Я думаю, что есть функция glTranslate(), скажем, что объект находится в 1,0,0. Затем вы должны перевести на -1,0,0, чтобы перейти к исходному. Это переводит вектор, идущий от центра объекта к началу координат.
код ничья, вероятно, выглядит примерно так:
glLoadIdentity();
glTranslate(0, 0, -10);
glRotate(...);
drawMolecule();
Теперь важно понимать, что эти преобразования применяются в обратном порядке. Если в drawMolecule
, мы указываем вершину, то эта вершина будет первым быть повернут вокруг оси заданной на glRotate
(который по определению проходит через местного происхождения молекулы), и затем быть переведено 10 единиц в направление -z.
Это имеет смысл, потому что glTranslate
по существу означает: «перевести все, что приходит после этого». Это включает в себя вызов glRotate
, поэтому результат вращения также переводится. Если бы обращения были отменены, результат перевода был бы повернут, что приведет к вращению вокруг оси, которая больше не проходит через начало координат.
Нижняя строка: повернуть объект вокруг его местного происхождения, поставить glRotate
вызов последней.
Похоже, что все преобразования идут в стек – rano
Да и нет. Когда вы пишете это так, происходит то, что текущая матрица преобразования просто умножается на матрицу вращения/перевода, которую вы указали, и нет возможности вернуться к предыдущей матрице (если вы не примените обратное преобразование, но с округлением ошибка, нет способа убедиться). Однако OpenGL * имеет * матричный стек: вы можете явно сохранить и восстановить текущую матрицу с помощью 'glPushMatrix' и' glPopMatrix'. Матрицей сверху стека является текущая матрица; Матрицы ниже, на которые вообще не смотрят. – Thomas
Хорошо, я понял, что тот факт, что порядок имеет значение, заключается в премультипликации двух матриц, не имеющих коммутативного свойства – rano
- 1. 3D-математика, вращающаяся вокруг произвольной оси
- 2. OpenGL ES 2.0 3d
- 3. OpenGL - Вращающаяся луна вокруг солнца без нее?
- 4. OpenGL ES 2.0: Вращающийся объект вокруг себя на Android
- 5. Opengl Es - вращение орбиты вокруг положения камеры
- 6. Вращающаяся модель в openGL 2 в iOS
- 7. Модели 3D CAD с OpenGL-ES
- 8. Вращающаяся Земля вокруг Солнца
- 9. Формат 3D-модели для OpenGL ES Android
- 10. ios opengl es 2.0 2D + 3D комбинация
- 11. OpenGL или OpenGL ES
- 12. iOS: OpenGL 2.0 ES перемещается вокруг объекта
- 13. OpenGL ES орбитальная камера вокруг объекта
- 14. Вращающаяся проблема OpenGL
- 15. 3D многоугольная триангуляция в opengl es
- 16. Импорт майя 3D в OpenGL ES
- 17. OpenGl ES glPushAttrib() 3D-рендеринг модели
- 18. OpenGL ES 3d вращение вызывает непреднамеренный перевод?
- 19. Вращающаяся точка вокруг точки опоры в 3d-пространстве
- 20. 3d модель выглядит наизнанку
- 21. вращать 3D-сферу вокруг себя - webGL
- 22. Вращающаяся проблема перспективы 3D-куба
- 23. Модель не отображается android OpenGL ES 2.0
- 24. Модель OpenGL (ES) в прозрачной модели
- 25. OpenGL es - не выглядит 3D, больше похож на 2D
- 26. OpenGL: Поворот вокруг точки в 3D пространстве
- 27. Roblox - Вращающаяся модель
- 28. Функция OpenGL ES
- 29. Вращать 3d модель вокруг абсолютных осей
- 30. Функция OpenGL ES
Как я могу перевести его в начало? Я думаю, что я на 0,0,0, а объект стоит на некоторых координатах, я пытался перевести даже внутри модели (я вижу только половину ее), но он держится на одном уровне. Простите меня, я полный noob , – rano
Я обновил свой ответ выше с помощью примера перевода. Если вы считаете себя новичком OpenGL, я помню, как многому научился из учебников «NeHe» при первом использовании OpenGL. Урок 10 (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=10) показывает, как перемещаться по 3D-миру (прокручивать бит за загрузкой моделей) –
@ S.C. Мэдсен: Я понял, что все, что мне нужно сделать, это перевести обратно количество, которое я сначала перевел. Но я не могу это сделать, я загружаю модель (поэтому я предполагаю, что его вершины имеют определенные координаты, и он не помещается в исходное состояние), чем я делаю некоторые gltranslate() и glRotate для перемещения «камеры» (I знать, что сцена движется), чтобы модель была на вид устройства. Поэтому я предполагаю, что я делаю что-то неправильно в отношении перспективы или системы координат. – rano