【发布时间】:2011-04-13 20:26:37
【问题描述】:
我正在尝试在 openGL (Java) 中绘制一个 5 尖星形状,该形状既填充又轮廓。我用来绘制它的代码
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();
当我这样做时,星星的轮廓绘制得很完美,但填充颜色在轮廓边缘之外溢出(如果我在没有轮廓的情况下绘制它,多边形看起来也不清晰)。任何想法为什么?
编辑:我添加了一个显示问题的屏幕截图
谢谢, 杰夫
【问题讨论】:
-
你试过用简单的
GL_TRIANGLE_FAN吗? -
我也可以用三角扇做轮廓吗?我在想,如果我这样做,那么轮廓将显示所有内部三角形......
-
@Jeff:不,您可以使用单个 GL_LINE_STRIP 绘制轮廓并忽略该调用的第一个顶点。 GL_TRIANGLE_FAN 需要一个额外的顶点作为中心。你不必在同一个 GL 类型中做所有事情,因为仍然会有两个 forloop 供 openGL 绘制。
-
嗯,同样的问题。有解决办法吗?
标签: opengl