Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Моделирование движения точки


Автор: shutffl 19.2.2010, 00:00
Доброго времени суток!!

Подскажите, пожалуйста, каким образом можно реализовать движение точки в пространстве(!!)?? Нужно ли использовать OpenGL(только OpenGL, DirectX не интересует) или только 2D с вычислением по оси Z?? Задача стоит достаточно простая: есть куб; в кубе движется точка; координаты точки всегда известны; грань куба известна. Надо смоделировать движение этой точки в заданном кубе, предусмотреть возможность вращения куба и траектории движения точки, приближение и удаление к/из куба..

Никак не могу понять, надо OpenGL использовать или все же нет?? Реализация планируется на Qt .. Можно ли сделать именно точку в OpenGL, или нужно рисовать сферу с  необходимым радиусом??

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

Автор: cardinal 19.2.2010, 01:04
Цитата(shutffl @  18.2.2010,  22:00 Найти цитируемый пост)
Подскажите, пожалуйста, каким образом можно реализовать движение точки в пространстве(!!)??

Почитай тут
http://forum.vingrad.ru/forum/topic-22163/hl/%25D1%2581%25D1%2584%25D0%25B5%25D1%2580%25D0%25B0/index.html
теперь осталось повторить нечто похожее с помощью OpenGL... smile 

Автор: shutffl 19.2.2010, 01:22
Спасибо, посмотрю.. То есть все таки OpenGL?? ((,

Автор: Rickert 19.2.2010, 02:11
Цитата(shutffl @  19.2.2010,  00:00 Найти цитируемый пост)
Подскажите, пожалуйста, каким образом можно реализовать движение точки в пространстве(!!)?? Нужно ли использовать OpenGL(только OpenGL, DirectX не интересует) или только 2D с вычислением по оси Z?

shutffl, что вы хотите спросить про OpenGL? Это библиотека которая работает с вашей видео картой и позволяет выводить изображение на экран. Если вы хотите выводить точку на экран - значит надо использовать что-то чтобы её выводило, логично? Вас не поймёшь: DirectX нельзя использовать, звёзды не рекомендуют и тут же спрашиваете: а можно ли использовать OpenGL? Вы представляете зачем он нужен?

Автор: shutffl 19.2.2010, 04:38
Я хочу узнать, можно ли средствами OpenGL решить эту конкретную задачу?? OpenGL для меня новая библиотека.. И, ради экономии времени, я и интересуюсь: для данной задачи необходим OpenGL или нет??
На счет DirectX.. Хм.. Да, его вера не позволяет использовать, если вы об этом..

Судя по описанию и примерам с opengl.org и qt.nokia.com, мою задачу можно попробовать решить с помощью OpenGL.. Хочется проще реализовать перерисовку при вращении, например, а не расчет всех координат при использовании 2D-моделирования..

То есть, немного упрощая условие: нужно построить прозрачный куб с известной величиной ребра; а далее - организовать в нем отрисовку траектории движения некоторого тела.. При этом должна быть возможность изменять положение куба в пространстве и приближать/удалять камеру обзора(zoom).. Естественно траектория тоже должна перерисовываться в зависимости от новых параметров(вращение, zoom).. Считайте это моделированием движения одной(!!) молекулы газа в некотором объеме(кубе)..

Некоторое время назад, когда просто пролистывал документацию по OpenGL, мне показалось, что реализовать алгоритм не составит труда.. Я думал: "Чего проще?? Координаты вершин куба я знаю.. Координаты точки - тоже.. Просто нарисую прямые в 3D-пространстве, а потом начну рисовать траекторию.." А оказалось, что не все так просто.. Примеры, которые я видел на вышеуказанных сайтах, рисуют куб вместе с текстурами.. А мне нужно "полый" куб с рисованием внутри него..

Автор: Rickert 19.2.2010, 12:30
Вы по всей видимости пытаетесь хватать по-верхушкам и не вникаете в суть. Текстурирование (отображение картинок на плоскостях куба) совсем не обязательно. Т.к. вам нужен полый куб, вы для начала можете его нарисовать в виде линий.
Код
glColor3ub(255, 0, 0);
glBegin(GL_LINES);
  glVertex3f(0.0f, 0.0f, 0.0f);
  glVertex3f(0.0f, 10.0f, 0.0f);
glEnd();

Самый простой и грубый пример отрисовать линию синего цвета.
Теперь говоря о траекториях, как бы я это реализовывал: создал бы список в который заносил положение частицы через определённый интервал времени и постоянно его отрисовывал.
Движение частицы внутри куба ограничено, следовательно и положение всей траектории будет ограничено кубом.
Теперь вопрос такой:

Цитата(shutffl @  19.2.2010,  04:38 Найти цитируемый пост)
ри этом должна быть возможность изменять положение куба в пространстве и приближать/удалять камеру обзора(zoom).. Естественно траектория тоже должна перерисовываться в зависимости от новых параметров(вращение, zoom).. Считайте это моделированием движения одной(!!) молекулы газа в некотором объеме(кубе)..

Вот у вас куб, а вот внутри летит частица, не касаясь его граней. В этот момент куб повернулся. Вопрос: частица должна повернуться с ним или продолжить лететь в том же направлении? Т.е. вам нужно вращение всей сцены или только именно куба? Если первое - то это легко организовать вращением мировой матрицы. Если второе, то возникает другой вопрос: а вращать ли с кубом траекторию полёта частицы? А то получится что в какой-то момент траектория выйдет за границы куба.
Все расчёты столкновений и поведения простые, если требуется вращать частицу с кубом, а вот если они должны быть самостоятельны, то уже немного сложнее.

Автор: shutffl 19.2.2010, 21:25
Rickert, спасибо за столь развернутый ответ!! Очень помогло в понимании!! Буду думать..


Цитата(Rickert @  19.2.2010,  12:30 Найти цитируемый пост)
Вопрос: частица должна повернуться с ним или продолжить лететь в том же направлении?

Частица должна изменить свое движение вместе с кубом.. То есть изменить надо всю сцену..

Автор: Rickert 20.2.2010, 08:46
Тогда это просто. Перед функциями отображения объектов вы запоминаете текущую матрицу и делаете поворот:
Код
glPushMatrix();
glRotatef(angle, 0.0, 1.0, 0.0);

После тогда как всё нарисовали, возвращаете значение матрицы:
Код
glPopMatrix()

Автор: shutffl 20.2.2010, 15:36
Еще раз спасибо!! Буду пробовать!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)