3

ポリゴンを描画して特定の色で塗りつぶそうとすると、奇妙な問題が発生します。

ポリゴン モードを次のように設定した場合:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

ポリゴンは問題なくレンダリングされます。

ポリゴン塗りつぶしモードを GL_LINE に設定した後にレンダリングされたポリゴン

ただし、その行を次のように置き換えるとすぐに:

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

ポリゴンは正しく塗りつぶされませんが、ほとんどの線が最初の頂点またはそれらの線に沿った何かに向かって投影されるようです:

ここに画像の説明を入力

私は明らかに何か間違ったことをしています。私がやりたいのは、ポリゴン内の色を維持することですが、いくつかの頂点を無視しているようです。何が間違っている可能性がありますか?

これは、私のコードの興味深い部分をいくつか選択したものです。いくつかのデータ構造の読み込みと、あまり関係のないその他のものをスキップしています。

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

    glutInitWindowSize(640, 480);
    glutInitWindowPosition(150, 100);
    glutCreateWindow("CR-View GL");

    glutDisplayFunc(display);

    glutMainLoop();
    return 0;
}

void display(void) {
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT);
    /* Set drawing color */
    glColor3f(1, 0, 1);

    drawPolys(currentDrawingMode);

    /* Clear screen and draw */
    glutSwapBuffers();
}

// Draws the polygons
void drawPolys (int id) {   
    int poly, vertex;
    // set wireframe mode (if an empty polygon is required)
    if (id == 0) {
        glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    }

    //Sets color fill mode
    if (id == 1) {
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    }

    // Draw each polygon...
    for (poly = 0; poly < polyCount; poly++) {

        glBegin(GL_POLYGON);
            // Draw each vertex...
        for (vertex = 0; vertex < Polygons[poly].vertexCount; vertex++) {
            glVertex2f((float)Polygons[poly].vertices[vertex].x, (float)Polygons[poly].vertices[vertex].y);
        }
        glEnd();
    } 
}
4

1 に答える 1

5

を使用している場合は、ポリゴンGL_POLYGONのみがサポートされていることに注意してください。

于 2013-04-12T02:55:47.183 に答える