| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Моделирование движения точки |
| Автор: shutffl 19.2.2010, 00:00 |
| Доброго времени суток!! Подскажите, пожалуйста, каким образом можно реализовать движение точки в пространстве(!!)?? Нужно ли использовать OpenGL(только OpenGL, DirectX не интересует) или только 2D с вычислением по оси Z?? Задача стоит достаточно простая: есть куб; в кубе движется точка; координаты точки всегда известны; грань куба известна. Надо смоделировать движение этой точки в заданном кубе, предусмотреть возможность вращения куба и траектории движения точки, приближение и удаление к/из куба.. Никак не могу понять, надо OpenGL использовать или все же нет?? Реализация планируется на Qt .. Можно ли сделать именно точку в OpenGL, или нужно рисовать сферу с необходимым радиусом?? Заранее спасибо!! |
| Автор: shutffl 19.2.2010, 01:22 |
| Спасибо, посмотрю.. То есть все таки OpenGL?? ((, |
| Автор: Rickert 19.2.2010, 02:11 | ||
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 | ||||
Вы по всей видимости пытаетесь хватать по-верхушкам и не вникаете в суть. Текстурирование (отображение картинок на плоскостях куба) совсем не обязательно. Т.к. вам нужен полый куб, вы для начала можете его нарисовать в виде линий.
Самый простой и грубый пример отрисовать линию синего цвета. Теперь говоря о траекториях, как бы я это реализовывал: создал бы список в который заносил положение частицы через определённый интервал времени и постоянно его отрисовывал. Движение частицы внутри куба ограничено, следовательно и положение всей траектории будет ограничено кубом. Теперь вопрос такой:
Вот у вас куб, а вот внутри летит частица, не касаясь его граней. В этот момент куб повернулся. Вопрос: частица должна повернуться с ним или продолжить лететь в том же направлении? Т.е. вам нужно вращение всей сцены или только именно куба? Если первое - то это легко организовать вращением мировой матрицы. Если второе, то возникает другой вопрос: а вращать ли с кубом траекторию полёта частицы? А то получится что в какой-то момент траектория выйдет за границы куба. Все расчёты столкновений и поведения простые, если требуется вращать частицу с кубом, а вот если они должны быть самостоятельны, то уже немного сложнее. |
| Автор: shutffl 19.2.2010, 21:25 | ||
Rickert, спасибо за столь развернутый ответ!! Очень помогло в понимании!! Буду думать..
Частица должна изменить свое движение вместе с кубом.. То есть изменить надо всю сцену.. |
| Автор: Rickert 20.2.2010, 08:46 | ||||
Тогда это просто. Перед функциями отображения объектов вы запоминаете текущую матрицу и делаете поворот:
После тогда как всё нарисовали, возвращаете значение матрицы:
|
| Автор: shutffl 20.2.2010, 15:36 |
| Еще раз спасибо!! Буду пробовать!! |