「上に」レンダリングされた 2D インターフェイスまたは 3D ワールドを作成する必要があるプロジェクトに取り組んでいます。他のいくつかのフォーラムで、仕事に「GluOrtho2D()」を使用し、完了したら GluPerspective() に戻すことができると読みました。唯一のことは、私が書いたテスト コードは、2D クワッドではなく、3D ワールドのみを表示するということです。ただし、3D レンダリング コードを無効にすると、クワッドが本来あるべき場所に表示されます。コードを openGL のみのステートメントに切り詰め、以下に書き留めました。コードは、Pyglet ライブラリを使用して Python で記述されています。
シーンの初期化コード:
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() の呼び出しによって 3D シーンが作成され、glBegin-glEnd のペアによって 2D クワッドが描画されます。
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)
誰かが私の間違いを指摘してくれることを本当に願っています!そして、私を助けてくれてありがとう:)