Рисование куба в представлении glOrtho()?

Я разрабатываю 4-х сплит-просмотрщик в OpenGL. Один вид — вид в перспективе, другие — для ортогональных проекций (спереди, слева, сверху).

Я написал метод, который рисует куб из (-1,-1,-1) в (1,1,1), и он хорошо работает в перспективе, но я не могу заставить его работать в моих представлениях, которые используют глОрто(...).

Сейчас настроил так:

    glOrtho(0, width, height, 0, 0, 1);

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

Я использую Qt и написал производный класс QGLWidget.


person fuji    schedule 11.05.2012    source источник
comment
Предполагая, что ваше окно просмотра также имеет ширину по высоте, а ширина и высота - это ваши координаты экрана (скажем, 800x600), которые сделают ваш куб шириной 2 пикселя в ортогональном представлении, нет? также ваши ближние и дальние плоскости отсечения равны 0 и 1, что может отрезать куб в зависимости от того, где находится глаз.   -  person vmpstr    schedule 11.05.2012
comment
Имеет смысл. ;) Так вы бы использовали glScale, чтобы сделать его больше только для орфографических представлений, или есть более умный способ?   -  person fuji    schedule 11.05.2012
comment
@j.dog: Обычно вы выбираете ограничения, установленные для объема проекционного пространства, чтобы они соответствовали ограничениям вашего объекта. Для вашего куба это будет glOrtho(-aspect, аспект, -1, 1, -1, 1), где аспект=ширина_просмотра/высота_просмотра   -  person datenwolf    schedule 12.05.2012


Ответы (1)


glOrtho определите 6 плоскостей отсечения в пространстве обзора после model transform и view transform. Таким образом, вы должны указать параметры glOrtho в Eye Space, а не в Screen Space. в вашем случае это должно быть glOrtho(-width/(float)height, width/height, -1.0f, 1.0f, -1.0f, 1.0f), что предполагает, что eye position находится в (0.0, 0.0, 0.0), а ваш viewport - это width на height. параметр NearVal параметра glOrtho должен быть отрицательным, если ближняя плоскость находится позади зрителя (положение глаз). Вы можете управлять glOrtho. 4-я глава документа Cg tuturial может дать вам подробную информацию о преобразовании различных координатных пространств, т. е. Object Space, World Space, Eye Space, Clip space, Normalized Device Space и Window Space.

person toolchainX    schedule 17.05.2012
comment
Итак, как бы вы изменили положение глаз, чтобы сказать 100 120? - person paulm; 05.02.2014
comment
@paulm Положение глаз относительно положения моделей, вы можете изменить положение моделей, чтобы настроить его для глаз. - person toolchainX; 12.02.2014