У меня есть простой прямоугольник, который я нарисовал на экране в opengl.Перемещение некоторых точек по оси z в OpenGL не работает
Моя цель сделать этот прямоугольник в 3D, так что левая сторона его глубже (ось г), чем правая.
Посмотрите на этой картинке, так что вы можете увидеть, что я имею в виду: 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_left достигает значения zFar или zNear Variable, определенного посредством вызова функции «glOrtho».
Мое glOrtho выглядит так: glOrtho (0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100);
Так что, если z_left становится выше, чем 100 или меньше, чем -100, то, что начинается странное отсечение. Я не знаю, почему. Я ожидал, что левая сторона прямоугольника будет перемещена по оси z, означает, что она будет двигаться глубже (от глаз) или ближе.
Может кто-нибудь сказать мне, что случилось здесь? Остальная часть кода довольно проста и стандартная. Простой прямоугольник в трехмерной среде немного изменился, чтобы иметь «3d панель», такую как прямоугольник.
Мои OpenGL инициализации выглядит следующим образом.
glClearColor(0, 0, 0, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Спасибо за любую помощь.
Хорошо, так что это значит? Является ли моя инициатива неправильной? Я думал, что я уже в перспективной проекции. Единственное, что я делаю, это init, а затем начать рисовать с помощью glVertex3f. Можете ли вы объяснить мне, что изменить? Второй блок вашего ответа имеет смысл. Спасибо за помощь. – NovumCoder
Вы используете glOrtho, что делает ортографическую проекцию. Используйте gluPerspective для получения проекции перспективы. –
Ах отлично. Просто googled для «перспективной проекции opengl». Я вижу здесь два разных. glFrustum и gluPerspective. Как я использую SDL + OpenGL, я думаю, что «glFrustum» - мой выбор. Большое спасибо. – NovumCoder