6

プリミティブを通常の塗りつぶしモードでレンダリングしてから、ワイヤー フレームとしてレンダリングしようとしています。

レンダリング コード:

glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.9f, 0.9f, 0.9f, 1);
// reset matrix
glLoadIdentity();
// fill display list
glColor3c(150, 255, 255);
glCallList(lDList);
// wireframe display list
glColor3f(0, 0, 0);
glLineWidth(10);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINES);
glCallList(lDList);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

表示リスト作成コード:

lDList = glGenLists(1);
glNewList(lDList, GL_COMPILE);
    glBegin(GL_QUADS);
        glVertex3i(-1, -1, 0);
        glVertex3i(1, -1, 0);
        glVertex3i(1, -1, -25);
        glVertex3i(-1, -1, -25);
    glEnd();
glEndList();

glColor3c マクロ:

#define glColor3c(r, g, b) glColor3f(r / 255, g / 255, b / 255)

周囲に黒いフレームが描かれたシアン色の平面が描画されることを期待していますが、表示リストを 2 回目にレンダリングすると、全体が単純に塗りつぶされて描画され、他のプリミティブのピクセルが上書きされます。描画したい平面ができあがりますが、それは単なる黒 (「バージョン」の行に指定した色) です。

役立つ可能性のあるその他の情報は、MSVC++ 2010 を搭載した Windows 7 で SDL を使用しているということです . 私の唯一の OpenGL セットアップ コードは、プロジェクションとモデル ビュー マトリックスをセットアップし、表示リストを作成します。

明らかに私の質問は、ディスプレイ リストを 2 回目に描画するときに、線を作成するのではなく、プリミティブを埋めるのはなぜですか? これを修正するにはどうすればよいですか?

4

1 に答える 1

13

OpenGL 4.0のドキュメントによるとglPolygonMode、2番目の引数、は、、、、またはのいずれかmodeのみである可能性があります。あなたの例では、完全に異なる列挙値であるを渡しています。GL_FILLGL_POINTGL_LINEGL_LINES

受け渡しがOpenGLによって処理され、受信したモードが期待どおりでない場合はGL_LINESデフォルトに戻ると思われます。GL_FILL

また、の仕様glPolygonModeはOpenGL2.1でも同じです。

于 2012-11-07T03:35:59.337 に答える