作为一个完整的OpenGL新手,我有一个问题,我不明白如何解决。我正在使用JOGL,并尝试绘制一个充满纯色和不同边框颜色的磁盘。我的问题在下图中很明显:
我无法理解的是为什么我仍然可以看到GLU产生的线条。绘制它的代码如下:
glColor3ub(r, g, b); // purple
gluDisk(quadric, 0, 50, 32, 2);
glColor3ub(r, g, b); // dark gray
gluDisk(quadric, 49, 50, 32, 2);
我怀疑我在混合/消除锯齿方面做错了。当我禁用抗锯齿时,形状用纯色绘制;但是我需要AA。我已经设置了AA和混合,如下所示:
glEnable(GL2.GL_BLEND);
glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL2.GL_LINE_SMOOTH);
glHint(GL2.GL_LINE_SMOOTH_HINT, GL2.GL_NICEST);
glEnable(GL2.GL_POLYGON_SMOOTH);
glHint(GL2.GL_POLYGON_SMOOTH_HINT, GL2.GL_NICEST);
最后,我的GLCanvas使用以下GLCapabilities创建:
caps.setAlphaBits(16);
caps.setDoubleBuffered(true);
caps.setHardwareAccelerated(true);
除此之外,二次渲染属性是默认属性。有人知道我做错了什么吗?对于可能遗漏的任何信息,我深表歉意!谢谢你的阅读!
伊利亚斯
答案 0 :(得分:1)
罪魁祸首是GL_POLYGON_SMOOTH。平滑从来没有像你看到的那样无痛和无意义的artifac就是这样的结果。一种更好的抗锯齿方法是多重采样。在http://www.opengl.org/wiki/Multisampling
上有一个教程