2012-05-11 3 views
1

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

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

Сейчас я поставил его так:

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

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

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

+0

Предполагая, что ваш видовой экран также является шириной по высоте, а ширина и высота - это ваши координаты экрана (скажем, 800x600), которые сделают ваш куб 2 пикселя в широком пространстве орто, нет? также у вас ближние и дальние обрезающие плоскости равны 0 и 1, которые могут скопировать куб в зависимости от того, где находится глаз. – vmpstr

+0

Делает смысл. ;) Итак, вы бы использовали glScale, чтобы сделать его больше для орфографических представлений, или есть более умный способ? – fuji

+0

@ j.dog: Обычно вы выбираете пределы, установленные для объема пространства проекции, в соответствии с тем, который используется для вашего объекта. Для вашего куба, который будет glOrtho (-спектность, аспект, -1, 1, -1, 1), где aspect = viewport_width/viewport_height – datenwolf

ответ

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. параметр NearValglOrtho должен быть отрицательным, если ближайшая плоскость находится за зрителем (положение глаз). Вы можете захотеть мужчине glOrtho. 4th Chapter от Cg tuturial может предоставить вам подробную информацию о преобразовании разных координатных пространств, то есть Object Space, World Space, Eye Space, Clip space, Normalized Device Space и Window Space.

+0

Итак, как бы вы изменили положение глаз, чтобы сказать 100 120? – paulm

+0

@paulm Положение глаз относительно положения моделей, вы можете изменить положение модели, чтобы настроить ее на глаз. – toolchainX

Смежные вопросы