在Windows 7上使用jogl的抗锯齿线看起来很糟糕

时间:2012-01-12 21:53:07

标签: windows opengl jogl antialiasing

我的java应用程序使用jogl创建具有重叠网格的表面。网格线是消除锯齿的。但是,在Windows上,消除锯齿是完全垃圾,除非我向表面添加一个小的alpha值。以下是所有三个平台上同一场景的屏幕截图:

Mac OS X:

Mac OSX

Ubuntu 11.10:

Ubuntu 11.10

Windows 7:

Windows

Windows 7,alpha = 0.01:

Windows with (small) alpha (0.01)

创建它的基本过程如下:

gl.glPushAttrib( GL.GL_ALL_ATTRIB_BITS );
gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f); 
drawSurface(gl);
gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPopAttrib();

gl.glDisable( GL.GL_LIGHTING );
gl.glDepthFunc(GL.GL_LEQUAL);
float[] c = {0, 0, 0, 0.5f};
gl.glColor4fv(c, 0);//the alpha here gets overridden if one is specified for the surface (which is why the Windows-with-alpha produces a darker grid)
drawGrid(gl);
gl.glDepthFunc(GL.GL_LESS);
gl.glEnable( GL.GL_LIGHTING );

在为曲面创建多边形之前,drawSurface()方法还会执行以下操作(使用GL_TRIANGLE_STRIP基元):

gl.glPushAttrib(GL.GL_LIGHTING_BIT);
gl.glColorMaterial(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE);
gl.glEnable(GL.GL_COLOR_MATERIAL);

drawGrid()方法设置反锯齿,如下所示:

gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL.GL_LINE_SMOOTH);
gl.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST);

网格本身是使用GL_LINE_STRIPs

创建的

我已阅读OpenGL documentation regarding line anti-aliasing并尝试了多边形偏移示例here

至于硬件,我有双启动IBM ThinkPad(64位四核),带有集成的nVidia 3100M卡和带有ATI Radeon的Intel Core 2 Duo iMac。由于Ubuntu和Windows在同一硬件上运行,我知道它不是硬件问题。

我正在寻找改善Windows网格线抗锯齿的建议。

1 个答案:

答案 0 :(得分:1)

原来我没试过(我以为我有,但我没有重建并正确测试)     gl.glDepthMask(false);

正确地添加它确实极大地改善了网格消除锯齿线的碎片化。

那就是说,我对这些线条的外观仍然不是100%满意,但是,现在,这个问题已经解决了。以下是“改进的”网格线的屏幕截图:

enter image description here

虽然这是一个很大的改进,但它仍然不如Mac OS X甚至Ubuntu好。