| PMG http://forum.pmg.org.ru/ |
|
| Урок 48 + Сдвиг и масштабирование http://forum.pmg.org.ru/viewtopic.php?f=1&t=5349 |
Страница 1 из 1 |
| Автор: | Vitaly [ 02 дек 2007 16:22 ] |
| Заголовок сообщения: | Урок 48 + Сдвиг и масштабирование |
Во первых хотелось бы поблагодарить вас за сайт! Есть вопрос по Уроку 47 "Вращение объектов с помощью класса ArcBall". Я, к сожалению, не очень понимаю работу с кватернионами и следствие этого появился вопрос -
Как доработать класс ArcBall для возможности динамического смещения повернутых объектов относительно координат экрана? Заранее спасибо! |
|
| Автор: | MagicWolf [ 03 дек 2007 09:55 ] |
| Заголовок сообщения: | |
Работу с кватернионами и понимать не надо. Честно говоря, там немного функций для работы с ними. А твой вопрос я увы не понял, если можно по подробнее. |
|
| Автор: | Vitaly [ 05 дек 2007 19:14 ] |
| Заголовок сообщения: | |
Не смог раньше ответить. нужно не забывать платить за интернет)) Попробую еще раз Вот кусок кода, который поворачивает объект glPushMatrix(); // Выполнить динамическую трансформацию glMultMatrixf(Transform.M); // Применить динамическую трансформацию glBegin(GL_TRIANGLES); // Начать рисовать модели . . . glEnd(); // Завершить рисование моделей glPopMatrix(); Для сдвига объекта я применил вот такой кусок glPushMatrix(); // Выполнить динамическую трансформацию glMultMatrixf(Transform.M); // Применить динамическую трансформацию glTranslate (...); glBegin(GL_TRIANGLES); // Начать рисовать модели . . . glEnd(); // Завершить рисование моделей glPopMatrix(); Он работает, но не так как хотелось: при сдвиге объекта его оси смещаются вместе с ним и соответственно поворачивается он относительно своих же осей. Например, я нарисовал сферу с центром в начале системы координат. Центр координатной системы у меня посредине экрана. Я вращаю сферу - все ок, но потом я смещаю сферу, например по оси Х. И я хотел бы, чтоб вращение осуществлялось все относительно того же центра экрана и в таком случае центр сферы двигался бы по круговой орбите относительно центра экрана. А он стоит на месте и сфера вращается относительно своего же центра, только смещенного по оси Х. Пытался методом научного тыка изменить матрицу M после поворота вот так m00 m01 m02 m03 + dx m10 m11 m12 m13 + dy m20 m21 m22 m23 m30 m31 m32 m33 а потом применить ее glMultMatrixf(Transform.M); Ничего хорошего не получилось. Примером реализации как должно быть может быть SolidWorks, AutoCAD, 3DMax |
|
| Автор: | MagicWolf [ 07 дек 2007 11:06 ] |
| Заголовок сообщения: | |
Как я понял ArcBall тут не причем. Может тебе нужен Scena Graph? Граф сцены? В твоем случае тебе нужен не видимый объект, который находится в начале координат, и привязанный к нему визуальный объект. Ты поварачиваешь невидимый объект, а визуальный относительно его поварачивается вокруг него. Вот примерный код для этого: Код: glMatrixMode(GL_MODELVIEW);
glPushMatrix(); glTranslatef(posv.v[0],posv.v[1],posv.v[2]); glRotatef(rotv.v[0],rotv.v[1],rotv.v[2],rotv.v[3]); glPushMatrix(); glScalef(scalev.v[0],scalev.v[1],scalev.v[2]); draw_this_object(); draw_присоединеные_objects(); glPopMatrix(); glPopMatrix(); Делаешь перенос, поворот относительно головного объекта, потом масштабирование, рисуешь сам объект и связанные с ним. Это рекурсия ... |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|