Создание мозаичного мира с OpenGL - PullRequest
2 голосов
/ 06 февраля 2010

Я планирую создать плиточный мир с OpenGL, со слегка повернутыми плитками, а дома и здания в мире будут сделаны из моделей. Кто-нибудь может подсказать мне, какую проекцию (ортогональную, перспективную) мне следует использовать и как настроить матрицу вида (используя OpenGL)?

Если вы не можете понять, какой стиль мира я планирую создать, посмотрите на эту игру: http://www.youtube.com/watch?v=i6eYtLjFu-Y&feature=PlayList&p=00E63EDCF757EADF&index=2

Ответы [ 2 ]

2 голосов
/ 06 февраля 2010

Использование Ортогональной и Перспективной проекции - это полностью художественный выбор. Серьезный покемон, о котором вы говорите, ортогональн - фактически, это полностью слоистые 2D спрайты (без 3D).

OpenGL не имеет матрицы VIEW. Он имеет матрицу MODELVIEW и матрицу ПРОЕКЦИИ. Для уровней в стиле покемонов я предлагаю использовать простой glOrtho для проекции.

Давайте предположим, что ваш мир находится в пространстве XY (координаты для плиток, камер и других объектов имеют форму [x, y, 0]). Если размер одной плитки равен 1,1, то что-то вроде glOrtho (12, 9, -10, 10) будет хорошей проекционной матрицей (12 в ширину, 9 в высоту, а Z = 0 - это земля).

Для MODELVIEW вы можете начать с загрузки идентичности, glTranslate () по положению плитки, а затем glTranslate () по отрицательному положению камеры, прежде чем вы начнете рисовать свою геометрию. Если вы хотите иметь возможность вращать камеру, вы должны glRotate () на отрицательный (обратный) угол поворота камеры между двумя Translate (). В итоге вы получите следующую матричную цепочку:

вывод = проекция и время; (CameraTranslation -1 & times; CameraRotation -1 & times; ModelLocation & times; ModelRotation) & times; ввод

Части в скобках - MODELVIEW, а « -1 » означает «обратный», который действительно отрицателен для перевода и транспонирован для вращения.

Если вы хотите вращать свои модели, вы обычно делаете это в первую очередь (до первого glTranslate ().

Наконец, я предлагаю форумы OpenGL (www.opengl.org) или подфорумы OpenGL www.gamedev.net, возможно, лучше задать этот вопрос: -)

0 голосов
/ 23 мая 2010

Проекция, используемая в этой видеоигре, выглядит Косой для меня. Есть много разных проекций, не только перспективных и орфографических. Смотрите здесь список наиболее распространенных: http://en.wikipedia.org/wiki/File:Graphical_projection_comparison.png

Вы определенно хотите перспективу с фиксированным вращением только вокруг оси X. Около 45-60 градусов или выше. Если вам не нужна настройка кода проекции самостоятельно, подойдет функция gluPerspective из библиотеки GLU. Предполагая, что OpenGL 2.1:

glMatrixMode(GL_PROJECTION); //clip matrix
glLoadIdentity();
gluPerspective(90.0, width/height, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW); //world/object matrix
glLoadIdentity();
glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
/* render   */

Последние два параметра для gluPerspective - это расстояние до ближней и дальней плоскости отсечения. Их значения зависят от масштаба, который вы используете для окружающей среды.

...