Координаты OpenGL для соответствия координатам экрана?

Вопрос просмотра Android opengl-es. Таким образом, в openGL положение камеры и вида по умолчанию равно 0,0. Как настроить вид и камеру так, чтобы они действовали в основном так же, как координаты экрана компьютера с 0,0 вверху. Я вызвал gl.glOrthof(-screenWidth/2, ScreenWidth/2, -ScreenHeight/2, ScreenHeight/2). Но я думаю, что это неправильно. Мне также нужно настроить камеру для просмотра всего поля. Я не знаю, как использовать gl.glFrustumf для выполнения этой задачи.


person user482619    schedule 23.05.2011    source источник


Ответы (1)


Чтобы использовать координаты вершин в качестве экранных координат, просто используйте glOrtho(0, width, height, 0, -1, 1) в матрице проекции и сохраните идентичность матрицы представления модели (по умолчанию). Обратите внимание, что я перевернул низ и верх, так как в GL (0,0) находится внизу слева, а вы хотите, чтобы он был вверху (но имейте в виду, что это также переворачивает каждый объект и, следовательно, порядок треугольников). Вы также забыли установить ближнюю и дальнюю плоскости (все, что находится вне этого интервала, отображаться не будет). Но когда теперь вы рисуете все свои объекты с z=0 (по умолчанию при рисовании только двухмерных вершин), все должно быть в порядке.

glFrustum — это просто альтернатива glOrtho. Где glOrtho строит орфографический (параллельный) вид, glFrustum строит вид в перспективе. Так что вам не нужно glFrustum.

person Christian Rau    schedule 23.05.2011
comment
разве это не должно быть glOrtho(0, ширина, 0, высота, -1, 1)? - person darethas; 21.11.2013
comment
@treehau5 Нет, если вы прочитаете весь ответ, особенно предложение сразу после вызова glOrtho: Обратите внимание, что я перевернул низ и верх, так как в GL (0,0) находится внизу слева, а вы хотите, чтобы он был вверху. . - person Christian Rau; 21.11.2013
comment
Правильно. Главный вопрос сейчас в том, зачем вам это? - person darethas; 22.11.2013
comment
@treehau5 Treehau5 Ну, откуда я знаю, почему OP нужно происхождение в левом верхнем углу. Но для этого есть варианты использования, учитывая, что многие системы 2D-рисования и работы с окнами работают именно так. - person Christian Rau; 22.11.2013