Застрял в создании игрового движка - PullRequest
2 голосов
/ 11 октября 2009

Я пытаюсь создать (простой) игровой движок, используя c ++, SDL и OpenGL, но, похоже, не могу сообразить следующий шаг. Это то, что я до сих пор ...

Объект движка, который контролирует основной игровой цикл

Средство визуализации сцены, которое будет визуализировать сцену

Стек игровых состояний, которые можно нажимать и высовывать

В каждом штате есть коллекция актеров, а у каждого актера - коллекция треугольников. Средство визуализации сцены успешно настроило матрицу проекции вида

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

Я прочитал, что эффективно создать очередь рендеринга, которая будет рисовать непрозрачные полигоны спереди назад, а затем рисовать прозрачные полигоны сзади спереди. Из-за этого мои актеры обращаются к методу queueTriangle объекта рендеринга сцены. Затем объект рендеринга сцены сохраняет указатель на каждый из треугольников актеров, затем сортирует их в зависимости от их положения и затем отображает их.

Проблема, с которой я сталкиваюсь, состоит в том, что для того, чтобы это произошло, треугольнику нужно знать свое положение в мировых координатах, но если я использую glTranslatef и glRotatef, я не знаю этих координат!

Может кто-нибудь, пожалуйста, пожалуйста, предложите мне решение или, возможно, свяжите меня с (простым) руководством о том, как решить эту проблему.

Thankyou!

Ответы [ 2 ]

2 голосов
/ 11 октября 2009

Если вы пишете класс камеры и используете его функции для перемещения / вращения в мире, вы можете использовать матрицу, полученную из внутреннего кватерниона, для преобразования вершин, давая вам положение в пространстве камеры, чтобы вы могли сортировать треугольники. сзади назад

1 голос
/ 12 октября 2009

Мне кажется, что вызов queueTriangle очень неэффективен. Современные двигатели часто работают со многими тысячами треугольников одновременно, поэтому вы вряд ли когда-либо будете работать с чем-либо на уровне одного треугольника. И если вы много меняли текстуры для выполнения этого заказа, то это еще хуже.

Я бы порекомендовал более простой подход - рисовать ваши непрозрачные полигоны в гораздо менее строгом порядке, сортируя позиции актеров в мировом пространстве, а не позиции отдельных треугольников, и визуализируя актеров спереди назад, актера одновременно , Ваши прозрачные / полупрозрачные полигоны по-прежнему требуют подхода «назад к фронту» (при условии, что вы не используете предварительно умноженную альфа), но все остальное должно быть проще и быстрее.

...