Как правильно настроить ландшафтную ортогональную проекцию с помощью OpenGL-ES 2.0 на iOS?


Это все в OpenGL ES 2.0...

Я пытаюсь смешать трехмерную перспективную проекцию с двумерной ортогональной проекцией, чтобы у меня был HUD, сидящий поверх 3D-сцены в моей игре.

Игра работает с ландшафтной ориентацией, и я действительно запутываюсь, как обращаться с ориентацией устройств.

Я визуализирую 3D-материал с подходящей проекционной матрицей и поворачиваю матрицу modelView и мое освещение на 90 градусов, чтобы 3D-сцена была правильным образом поднята. Этот бит все работает нормально.

Моя проблема заключается в том, что я не могу понять, как правильно настроить матрицу 2D-проекции, чтобы начало координат находилось в верхнем левом углу, когда устройство находится в ландшафте с кнопкой home слева.

Как правильно построить ортогональную матрицу, чтобы это произошло? В настоящее время я использую это

// OrthoMatrix does the same as the old GLOrthof function (left, right, bottom, top, near, far);
projectionMatrix2D = mat4::OrthoMatrix(0, screenWidth, screenHeight , 0, -1.0, 1.0);

Однако это просто помещает начало координат в левом верхнем углу, если устройство находится в портрете с кнопкой home внизу, и вращение устройства в моей руке означает все на своей стороне.

Должен ли я пытаться изменить матрицу 2D-проекции или мне нужно сделать что-то еще?

1 2

1 ответ:

Я задал этот вопрос на Gamedev, но в более общем виде и получил полезный ответ.

Как я могу создать ортогональный дисплей, который обрабатывает различные размеры экрана?