opengl中用glEnable(GL_POLYGON_SMOOTH)消除多边形锯齿 物体表面出现虚线,有些地方甚至成半透明的了

tongdanhao 2010-04-19 08:19:11
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//设置混合函数
glEnable(GL_BLEND);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POLYGON_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
这是消除锯齿的方式,消除点.线锯齿时,没问题,但是加上glEnable(GL_POLYGON_SMOOTH);图形表面会出现很多虚线,实体的球体也会出现好多透明的斑斑点点,这是怎么回事啊?有些教材上的例子我运行时也会出现这种情况,跟显示器有关吗?怎么样才能解决啊?谢了,大侠们!!!
...全文
1547 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeonBlizzard 2011-02-01
  • 打赏
  • 举报
回复
楼主是否对多边形使用了“网格化”?

如果是,这个问题就是因为OpenGL对多边形中的多个小三角形进行逐个填充、边缘抗锯齿。最后拼接到一起,三角形的相邻部分会出现混合痕迹所致。

解决方法:
1. 你可以使用glEdgeFlag()函数,包含顶点序列中的那些“非轮廓顶点”。以此告诉OpenGL哪些线条是轮廓,哪些不是。但这中方法很麻烦。

2. 使用先填充再描边的办法,填充时关闭SMOOTH -- glDisable(GL_LINE_SMOOTH)。
描边时打开SMOOTH -- glEnable(GL_LINE_SMOOTH);



月中蓝 2011-01-17
  • 打赏
  • 举报
回复
顶5L,开Multisample
「已注销」 2011-01-17
  • 打赏
  • 举报
回复
偶也偶然间解决了这个问题
zenny_chen 2010-08-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhangci226 的回复:]

和显示器没有关系,opengl自带的反锯齿效果本来就不好
[/Quote]
DX的也好不到哪里去。

要获得较好的效果,楼主可以还是通过多加些多边形进行处理。
zenny_chen 2010-08-22
  • 打赏
  • 举报
回复
个人建议多边形抗犬齿还是用多重采样抗犬齿的方式比较好,呵呵。
当然你这个也行,但是效果不是太好。
出现透明的斑斑点点估计是与背景色进行混合后产生的。
ga6840 2010-08-21
  • 打赏
  • 举报
回复
去掉


glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//设置混合函数
glEnable(GL_BLEND);

就行了。

只不过这样效果确实不太好,我试了。
ForestDB 2010-04-20
  • 打赏
  • 举报
回复
帮顶。
tongdanhao 2010-04-19
  • 打赏
  • 举报
回复
那应该如何解决啊?应该可以消除的吧?
张赐 2010-04-19
  • 打赏
  • 举报
回复
和显示器没有关系,opengl自带的反锯齿效果本来就不好

65,084

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧