Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FLTK:OpenGL三角形平滑_Opengl_2d_Fltk - Fatal编程技术网

FLTK:OpenGL三角形平滑

FLTK:OpenGL三角形平滑,opengl,2d,fltk,Opengl,2d,Fltk,我使用FLTK 1.3作为MacOSX10.9上OpenGL窗口上下文创建(Fl_Gl_窗口)的基础 目标是创建一些带有简单原语的网格。我以前用OpenGL在2D中做过一些简单的事情,但现在我迷路了。所有渲染效果都很好,但边缘除外。他们都是那么,嗯。。。艾奇,你知道的 很明显,这些对象需要任何形式的抗锯齿。将是简单的供应商实施特定的平滑AA或完全多采样。问题是我不能在FLTK中打开它。不能用于三角形,但可以用于直线 到目前为止,我尝试了glEnable(GL_POLYGON_SMOOTH)、窗

我使用FLTK 1.3作为MacOSX10.9上OpenGL窗口上下文创建(Fl_Gl_窗口)的基础

目标是创建一些带有简单原语的网格。我以前用OpenGL在2D中做过一些简单的事情,但现在我迷路了。所有渲染效果都很好,但边缘除外。他们都是那么,嗯。。。艾奇,你知道的

很明显,这些对象需要任何形式的抗锯齿。将是简单的供应商实施特定的平滑AA或完全多采样。问题是我不能在FLTK中打开它。不能用于三角形,但可以用于直线

到目前为止,我尝试了glEnable(GL_POLYGON_SMOOTH)、窗口多采样(似乎不起作用)、不同的混合函数、更改着色器模型

也许是因为物体的三角形扇形结构?请帮助我,谢谢你

用于对象的代码:

float object_width = 100;
float object_height = 50;
float object_x = 250;
float object_y = 100;

glColor3f(0, 0, 1);
glBegin(GL_TRIANGLE_FAN);
for(int i = 0; i < 30; i++)
   glVertex2f(object_x + (object_width / 2) * cosf(i * 12 * DEG2RAD), object_y + (object_height / 2) * sinf(i * 12 * DEG2RAD));
glEnd();
在init上使用的代码:

glClearColor(0.9, 0.9, 0.9, 1);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Colored output, but not smooth
//glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_SRC_ALPHA); // All drawn black, no smooth
//glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE); // All drawn black, no smooth either

glEnable(GL_BLEND);

glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH); // not working???
在不同于GL_SRC_ALPHA的混合模式下,GL_ONE_减去_SRC_ALPHA得到以下图片:


要使
GL\u POLYGON\u平滑
正常工作,需要两件事:1。存储目标alpha和2的像素格式<代码>GL_SRC_ALPHA_饱和用于混合SRC。因素这里显然没有观察到第2点,第1点也无法验证,因为您没有列出您的上下文设置代码。@AndonM.Coleman在GL_SRC_ALPHA_饱和SRC混合的问题和示例中添加了mode init line。我不熟悉FLTK,所以我查看了API文档。您所做的更改是正确的,您需要
|FL_ALPHA
来分配目标ALPHA。但是混合函数应该是
GL_SRC_ALPHA_SATURATE,GL_ONE
(它正在为您创建一个黑色的blob,这种行为实际上是没有目标ALPHA的帧缓冲区的典型行为,这很奇怪)。FLTK确实允许您使用
\FL\u MULTISAMPLE
分配多个重叠的帧缓冲区,但唯一奇怪的是,它不允许您按照我所能说的最好方式指定样本数,这让它变得毫无价值:-\@AndonM.Coleman感谢您的尝试。这似乎是真正依赖硬件的功能(平滑AA),在较新的图形卡上不受支持,这里是2008年的老话题:
glClearColor(0.9, 0.9, 0.9, 1);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Colored output, but not smooth
//glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_SRC_ALPHA); // All drawn black, no smooth
//glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE); // All drawn black, no smooth either

glEnable(GL_BLEND);

glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH); // not working???