0

我正在尝试将一些线循环设置为 1 像素宽度,但是当宽度数为奇数时,我总是会得到一些抗锯齿效果

这里有一些示例代码:

                    gl2.glLineWidth(1.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, 0); 
                        gl2.glVertex2i(-10, 10); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(2.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -10); 
                        gl2.glVertex2i(-10, 0); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(3.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -20); 
                        gl2.glVertex2i(-10, -10); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(4.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -30); 
                        gl2.glVertex2i(-10, -20); 
                    gl2.glEnd(); 

                    gl2.glLineWidth(5.0f); 
                    gl2.glBegin(GL2.GL_LINES); 
                        gl2.glVertex2i(-10, -40); 
                        gl2.glVertex2i(-10, -30); 
                    gl2.glEnd(); 

产生这个(从上到下的顺序):

http://dl.dropbox.com/u/1401029/LineWidth.png

gl2.glIsEnabled(GL2.GL_LINE_SMOOTH) 返回 false 并且 gl2.glhint 似乎根本没有影响它

有任何想法吗?

4

2 回答 2

1

根据文档,JOGL 默认为 MSAAx2。

setNumSamples(1)在初始化时应该可以解决问题,但是您将完全失去抗锯齿功能。用期望值的倍数调用 glLineWidth 怎么样NumSamples

于 2012-05-22T07:44:24.740 回答
1

在需要澄清OpenGL 规范不是像素精确之前。事实上,你不能假装在每个 OpenGL 实现上都有相同的结果。

然而,在大多数可控的输入值上,多边形光栅化在不同的实现上给出了稳定的结果。

根据您的评论,这就是您设置模型视图/投影矩阵的方式:

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity(); // map a 2D bild width*height on OpenGL
glu.gluOrtho2D(-width/2, (width+1)/2, -(height+1)/2, height/2);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();

我不知道类型和值,width甚至不知道height视口...但是为了给您这个答案,我假设您有一个视口widthx height,其中widthheight是您在代码中使用的变量,并且它们的值已设置到100.

实际上,您会建议您以这种方式设置投影矩阵:

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity(); // map a 2D bild width*height on OpenGL
glu.gluOrtho2D(-width/2, +width/2, -height/2, height/2);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();

为了获得最大的可扩展性,我建议您附加以下模型视图矩阵转换:

gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslate(0.376, 0.376, 0.0);

我不知道 java OpenGL 绑定的细节,但也遵循Calvin1602所说的(禁用多重采样)。

于 2012-05-25T19:24:13.513 回答