У меня есть простой прямоугольник, который я нарисовал на экране в 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();
Спасибо за любую помощь.