0

作为一个完整的 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);

除此之外,Quadric 渲染属性是默认值。有人明白我做错了什么吗?对于可能丢失的任何信息,我深表歉意!谢谢阅读!

伊利亚斯

4

1 回答 1

1

罪魁祸首是 GL_POLYGON_SMOOTH。平滑从来没有无痛的工作,像你看到的那些伪影就是由此产生的结果。一种更好的抗锯齿方法是多重采样。http://www.opengl.org/wiki/Multisampling有一个教程

于 2013-07-04T15:50:36.817 回答