C ++ OpenGL - получить мировые координаты объектов (необходимые для обнаружения столкновений) - PullRequest
0 голосов
/ 20 ноября 2010

Я немного новичок в OpenGL, но вот моя проблема:

В настоящее время я пишу создатель мира (для блоков Lego Duplo), и я сделал свои блоки в 3dsmax, а затем экспортировал их в файл .obj,Затем я создал парсер для разбора файла.Я в основном все положил в glNewList.Затем для каждого legoblock у меня есть некоторые параметры (содержащие значения, которые они должны перевести по оси x и z (оси y еще нет)), которые я использую, чтобы изменить свою позицию после вызова списка (блоки перемещаются с помощьюarrowkeys).

Теперь при создании нового блока я хочу создать некоторую форму обнаружения столкновений, чтобы, когда новый блок занимал позицию, уже занятую другим блоком, блок автоматически переходит поверх этого.другой блок (переводя его по оси Y).

Есть ли способ получить ваши мировые координаты определенного объекта?Или есть другой, лучший способ сделать то, что я пытаюсь сделать?

Пожалуйста, помогите мне здесь!

Спасибо заранее!

Ответы [ 2 ]

5 голосов
/ 20 ноября 2010

OpenGL понятия не имеет, о чем вы говорите.Он просто видит независимые вершины и многоугольники.Вы должны сделать эти вычисления самостоятельно, используя данные из вашей модели.OpenGL о визуализации.Все остальное должно быть сделано вашим приложением.

Общий подход заключается в сохранении каждого объекта с его текущей позицией и поворотом в вашем приложении.Затем - в вашем цикле рисования - вы просто перебираете все объекты, переводите и поворачиваете их независимо (обычно это полезно здесь: glPushMatrix() и glPopMatrix()).

1 голос
/ 20 ноября 2010

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

Тогда все становится просто: вы отправляете ваши данные в OpenGL и их визуализации. Не наоборот: вы не извлекаете информацию о положении объектов из GL.OpenGL не является местом хранения данных вашей логики.

...