Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 18:30   #1
MiraJe
 
Регистрация: 10.01.2011
Сообщений: 5
По умолчанию OpenGL и С++. Обучение.

Всем доброго времени суток.
Взялись с преподавателем за OpenGL с целью немного подучится.

Решаем такую задачку:
В некотором ограниченном пространстве находиться биологический материал, определенной толщины, и длины. Его атакуют определенное количество фотонов. Фотоны проходят определенный путь до столкновения с материалом. При столкновении текущего фотона с материалом возможны три исхода:
3) Фотон поглотился материалом.
Здесь действие с текущим фотоном закончено. Приступаем к следующему.
2) Фотон прошел сквозь материал.
Условие того, что фотон прошел сквозь материал, это то, что он прошел через всю толщину, и не поглотился, и не отразился.
1) Фотон отразился.

В первом пункте самое интересное. Фотон считается отраженным если его координата X приняла отрицательное значение, в противоположном случае фотон считается оставшимся на материале. Для него рассчитывается новый угол движения, и новые координаты X и Y, и снова спрашивают, фотон поглощен материалом, или отражен, или прошел сквозь него. Т.е. Как только фотон попал на материал, мы гоняем его там, пока с ним не произойдет один из исходов.

На протяжении того как фотоны бьются об материал подсчитываются коэффициенты: Отражения, Поглощения, Пропускания.
Вот код решения этой задачи математически. Я его весь прокомментировал. http://pastebin.ru/QFWTQlkF
В математическое решение не входит перерасчет новой координаты Y т.к. нам она не нужна. Она нужна при рисовании фотона в OpenGL. Этот пересчет есть в этой блок схеме: http://postimage.org/image/3n1k5ks6f/
Внимание блок схема огромная ~800х3000.

Блок схема к реализации которой движемся.

На данный момент написали код который отрисовывает фотон летящий начальное расстояние до материала.
Вариант 1:
http://pastebin.ru/7dt0mqBe
Вариант 2:
http://pastebin.ru/oLdBzX5A

Второй вариант написали сегодня. Считаем его более удачным, но из за функции glutIdleFunc движение объекта начинает постепенно притормаживать, как будто идет переполнение "стека", и процессор сильно загружается.
Основные вопросы которые сей час решаем, это организация анимации движения объекта в ортогональной проекции, и как можно перерисовать объект передав ему нужные параметры.
Рассматриваю вариант, что бы реализовать данную задачу используя Объекты. Создать сцену и на нее выводить объекты. Возможно ли?.
Подскажите кто, что сможет.

Последний раз редактировалось MiraJe; 29.03.2012 в 18:34.
MiraJe вне форума Ответить с цитированием
Старый 31.03.2012, 06:15   #2
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Цитата:
Решаем такую задачку:
Мне это напомнило игру шарик и кирпичи – типа dxball.
С некоторыми правками.
Уберем кирпичи.
Поставим источник направленной генерации шариков(фотонов) – источник света.
Площадка будет играть роль материала.
Условием пропускания / отражения сквозь площадку как раз и будут свойства материала которые, вы в условии можете задать.
glOrtho – ортогональная перспектива.
Warn вне форума Ответить с цитированием
Старый 03.04.2012, 08:20   #3
MiraJe
 
Регистрация: 10.01.2011
Сообщений: 5
По умолчанию Обучение движется

Разобрались с преподавателем, и дописали программу. Кому интересно можете взглянуть Releze 5.4
Я подробно расписал код программы. Новичкам в OpenGL должно быть полезно прочитать опираясь на готовый пример.
Подробно расписанный код

PS В коде использованы функции характерные для Linux это system(). Эту функцию я использовал для очистки информации в консоли.
В программе значения использованы очень малы. Если поиграться со значением переменных таких как L может быть интересный результат.
MiraJe вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обучение (C++) MaximEvent Помощь студентам 4 19.12.2011 20:38
Обучение в Интернете refrigerator Свободное общение 8 03.03.2011 21:06
Обучение языку SlideSide Помощь студентам 2 07.01.2011 23:27
обучение программированию на С++ ArniLand Общие вопросы C/C++ 3 12.04.2010 05:01
Обучение Паскаль indig0 Свободное общение 5 06.05.2009 17:02