我正在尝试将一些线路循环设置为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似乎根本不会影响它
任何想法?
答案 0 :(得分:1)
根据the documentation,JOGL默认为MSAAx2。
初始时 setNumSamples(1)
应该可以解决问题,但是你完全松散了抗锯齿。如果用NumSamples
倍的期望值调用glLineWidth呢?
答案 1 :(得分:1)
在需要澄清之前OpenGL specification is not pixel-exact。实际上,你不能假装在每个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
类型和值,甚至不知道视口......但为了给你这个答案,我假设你有一个视口width
x height
,其中width
和height
是您在代码中使用的变量,其值设置为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 所说的内容(禁用多重采样)。