![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
REDiez |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Добрый день.
Задача заключается в следующем: необходимо вращать цилиндр по окружности радиуса R=1, при этом сам цилиндр должен также вращаться вокруг своей собственной оси. Как это сделать с помощью OpenGL? Координаты центра цилиндра в глобальной системе координат (0,1,0). Одновременное вращение по двум осям (glRotate(Angle,1,1,0)) к нужному результату, понятное дело не приводит. Пока что получается либо вращение цилиндра по окружности без вращения цилиндра воруг собственной оси, либо наоборот ![]() Для упрощения можно считать, что цилиндр должен вращаться по окружности вокруг оси X, а собственная ось вращения цилиндра Y.) Заранее благодарю за ответы. Это сообщение отредактировал(а) REDiez - 7.7.2006, 11:26 |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
нужно просто дважды вызвать процедуру
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
REDiez |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Так тоже не работает.)
После glRotate(Angle,1,0,0)) будет новая ось Y.) А мне бы как-то старую сохранить.) |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Насколько я помню в OpenGl есть специальная функция для сохранния настроек. Воспользуйтесь glPushAttrib и glPopAttrib с параментами GL_TRANSFORM_BIT или GL_VIEWPORT_BIT. glPopAttrib - сохранит настройки перед движением glPopAttrib - востановит их в нужный момет. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
REDiez |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Если я правильно понимаю, то применительно к данному случаю glPushAttrib и glPopAttrib мало чем отличаются от glPushMatrix или glPopMatrix.)
И не то не другое проблемы не решают.) |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
А теперь понял! надо ось цилиндр сдвигать в начало координат, повернуть вокруг своей оси, затем вернуть его в начальное положнеие (когда он вращается вокруг внешней оси), затем повернуть вокруг внешней оси и далее повторяем первый и второй шаги по очереди.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
REDiez |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Переводя ваши слова в программный код - это получается так:
glTranslate(-1,0,0); glRotate(Angle,1,0,0); - поворот вокруг своей оси glTranslate(1,0,0); glRotate(Angle,0,1,0); - поворот вокруг внешней оси glCallList (1); - цилиндр представлен в виде списка Подход то кажется правильный, но пока что еще не работает.) |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
А почему сдвиг по оси x при вращениии вокруг глобальной оси положение цилиндра в пространсве меняется, а сдвиг в центр должен происходить при любом положении цилиндра, значит параметры
надо будет пересчитать для каждого момента времени. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
REDiez |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Возможно и так. Но мне пока всеравно не понятно как это сделать.)
Надеюсь будут еще какие-нибудь варианты решения.) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |