OpenGL залил многоугольник цветом "кровотечение" - PullRequest
2 голосов
/ 14 апреля 2011

Я пытаюсь нарисовать пятиконечную звездную фигуру в openGL (Java), которая заполнена и обведена контуром.Код, который я использую, чтобы нарисовать его

gl.glPushAttrib(GL.GL_ALL_ATTRIB_BITS);
try {
   // set attributes for filling the shape
   Color fillColor = Color.GREEN;
   float[] rgb = fill.getRGBColorComponents(null);
   gl.glColor4f(rgb[0], rgb[1], rgb[2], 1f);
   gl.glEnable(GL.GL_POLYGON_SMOOTH);
   gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL);                    
   gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
   gl.glCallList(this.glListId);

   // set attributes for outlining the shape
   gl.glEnable(GL.GL_LINE_SMOOTH);
   Color outline = Color.RED;
   float[] rgb = outline.getRGBColorComponents(null);
   gl.glColor4f(rgb[0], rgb[1], rgb[2], 1f);
   gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE);
   gl.glLineWidth(5);                 
   gl.glCallList(this.glListId);
}
finally {
    gl.glPopAttrib();
}

Создание списка вызовов выглядит следующим образом:

gl.glNewList(this.glListId, GL.GL_COMPILE);
gl.glBegin(GL.GL_POLYGON);
for (int j = 0; j < xCoords.length; j++) {
   // 2d polygon
   gl.glVertex2d(xCoords[j], yCoords[j]);
}
gl.glEnd();

Когда я делаю это, контур звезды прекрасно рисуется,но цвет заливки выходит за границы контура (если я нарисую его без контура, многоугольник тоже не выглядит четким).Есть идеи, почему?

РЕДАКТИРОВАТЬ: я добавил скриншот, показывающий проблему

enter image description here

спасибо, Джефф

1 Ответ

7 голосов
/ 14 апреля 2011

В зависимости от того, что вы подразумеваете под «формой звезды», помните, что GL_POLYGON может правильно отображать только выпуклые многоугольники:

GL_POLYGON

Рисует один выпуклый многоугольник. Вершины с 1 по N определяют это многоугольник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...