ポリゴンを描画して特定の色で塗りつぶそうとすると、奇妙な問題が発生します。
ポリゴン モードを次のように設定した場合:
glPolygonMode(GL_FRONT_AND_BACK, 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();
}
}