Перемещение некоторых точек по оси Z в OpenGL не работает - PullRequest
0 голосов
/ 26 июля 2010

У меня есть простой прямоугольник, который я нарисовал на экране в OpenGL.

Моя цель - нарисовать этот прямоугольник в 3D, чтобы левая сторона была глубже (ось z), чем правая.

Посмотрите на эту картинку, чтобы вы поняли, что я имею в виду: http://www.battleteam.net/tech/fis/docs/images/metroid_hud1.png

Это код, который я использую, чтобы нарисовать прямоугольник, который использует разные цвета, и я немного переместил обе точки на левую сторону.

glColor4f( 1.0, 1.0, 1.0, 1.0 );
glVertex3f( 0,            -20,           z_left );

glColor4f( 0.0, 1.0, 1.0, 1.0 );
glVertex3f( SQUARE_WIDTH, 0,             0 );

glColor4f( 1.0, 0.0, 1.0, 1.0 );
glVertex3f( SQUARE_WIDTH, SQUARE_HEIGHT, 0 );

glColor4f( 1.0, 1.0, 0.0, 1.0 );
glVertex3f( 0,            SQUARE_HEIGHT-20, z_left );

Я использую переменную z_left для динамического изменения значения z для обеих точек на левой стороне, чтобы переместить эти точки на оси z. Но происходит то, что прямоугольник обрезается с левой стороны. Это происходит, когда значение z_left достигает переменной zFar или zNear, определенной с помощью вызова функции "glOrtho".

Мой glOrtho выглядит так: glOrtho (0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100);

Так что, если z_left становится выше 100 или меньше -100, то начинается это странное отсечение. Я не знаю почему. Я ожидал, что левая сторона прямоугольника будет перемещаться по оси z, что означает перемещение его глубже (от глаз) или ближе.

Может кто-нибудь сказать мне, что здесь не так? Остальная часть кода довольно проста и стандартна. Простой прямоугольник в трехмерной среде немного изменен, чтобы иметь «трехмерную панель», похожую на прямоугольник.

Мой инициал OpenGL выглядит следующим образом.

glClearColor( 0, 0, 0, 0 );
glMatrixMode( GL_PROJECTION );
glLoadIdentity(); glOrtho( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100 ); 
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

Спасибо за любую помощь.

1 Ответ

4 голосов
/ 26 июля 2010

Ортографические проекции обладают этим свойством, вы можете перемещать их по оси Z, но объект выглядит так же. Переключитесь на перспективную проекцию, где объекты уменьшаются с расстоянием до камеры.

Что касается отбраковки, вы рисуете вне куба просмотра (когда Z <-100 или Z> 100). Проекция отбросит все, что находится за ее пределами.

...