Я работаю над проектом, который требует, чтобы я создал 2D-интерфейс, визуализированный «сверху», или 3D-мир. На некоторых других форумах я читал, что вы можете использовать «GluOrtho2D ()» для этой работы и вернуться к GluPerspective (), как только закончите. Единственное, что мой тестовый код, который я написал для него, отображает только трехмерный мир, а не двухмерный четырехугольник. Однако, когда я отключаю код 3D-рендеринга, четырехугольник появляется там, где должен был быть. Я сократил код до операторов только для openGL, которые я написал ниже. Код написан на Python с использованием библиотеки Pyglet.
Код инициализации сцены:
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/height, .1, 10000.)
glMatrixMode(GL_MODELVIEW)
glClearDepth(1.0)
glShadeModel(GL_FLAT)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
Код рендеринга кадра. Вызов builder.buildMap () создает трехмерную сцену, а пара glBegin-glEnd рисует двухмерный четырехугольник:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
stage.set3DMode(window.width, window.height)
builder.buildMap()
stage.set2DMode(window.width, window.height)
glBegin (GL_QUADS)
glVertex2i(0, 0)
glVertex2i(0, 200)
glVertex2i(200, 200)
glVertex2i(200, 0)
glEnd()
функция stage.set3DMode:
glDisable(GL_DEPTH_TEST)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, width, 0, height)
glMatrixMode(GL_MODELVIEW)
и функция stage.set3DMode:
glEnable(GL_DEPTH_TEST)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/float(height), .1, 10000.)
glMatrixMode(GL_MODELVIEW)
Я действительно надеюсь, что кто-нибудь могу указать на мою ошибку! И спасибо за помощь :)