PMG

Форумы по созданию игр
Текущее время: 20 апр 2024 01:55

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Урок 48 + Сдвиг и масштабирование
СообщениеДобавлено: 02 дек 2007 16:22 
Не в сети
Новичок
Аватара пользователя

Зарегистрирован: 02 дек 2007 16:07
Сообщения: 2
Откуда: Украина, Донецкая область
Во первых хотелось бы поблагодарить вас за сайт!
Есть вопрос по Уроку 47 "Вращение объектов с помощью класса ArcBall".
Я, к сожалению, не очень понимаю работу с кватернионами ;/ и следствие этого появился вопрос -
Как доработать класс ArcBall для возможности динамического смещения повернутых объектов относительно координат экрана?

Заранее спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 03 дек 2007 09:55 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Работу с кватернионами и понимать не надо. Честно говоря, там немного функций для работы с ними. А твой вопрос я увы не понял, если можно по подробнее.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 дек 2007 19:14 
Не в сети
Новичок
Аватара пользователя

Зарегистрирован: 02 дек 2007 16:07
Сообщения: 2
Откуда: Украина, Донецкая область
Не смог раньше ответить. нужно не забывать платить за интернет))
Попробую еще раз
Вот кусок кода, который поворачивает объект

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 дек 2007 11:06 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Как я понял 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();


Делаешь перенос, поворот относительно головного объекта, потом масштабирование, рисуешь сам объект и связанные с ним. Это рекурсия ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB