OpenGL 简单曲面锯齿消除?

exceed_me 2011-09-21 09:25:15
由于项目的需要,初学 OpenGL,需要实现类似以 正弦函数 为实例的曲面,改自 NeHe 的 OpenGL 教程 11 课,效果如下:



可以看到有非常明显的锯齿,

我也查阅了一些方法,包括红宝书中的多重采样,NeHe 教程的全屏反走样,但实际上经过测试,我现在的电脑是集

成显卡,不支持这些扩展,根本没效果。
实现原理用的也是 NeHe 的教程中所说的,分割曲面成小块,进行纹理曲面

映射,但锯齿太严重。

还有别的办法吗,我看到 NeHe 的教程中 28 课 Bezier 曲面映射效果倒是不错,难道我改成 Bezier 实现?Bezier
曲面的话有哪些劣势,相比分割成小方格模拟的方法?
...全文
448 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
exceed_me 2011-09-29
  • 打赏
  • 举报
回复
还是结帖吧,总结一下自己查找及尝试的结果:


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


但是实际上没有任何效果,因为这种方法只针对Line,Point方式的渲染反走样,而不支持多边形的填充和纹理映射,将填充模式glPolygonMode设置为GL_LINE时,使用上述方法可发现可以很好的支持锯齿消除,线条非常平滑,但可惜的是实心填充下完全没有效果。

1.渲染完Screen后绘制平滑曲线
通过在渲染完各个Screen后,根据Screen的上下边缘的坐标,绘制一条曲线,使用上述所说的方法,绘制出来的曲线是非常平滑的,通过这种方式,可以一定程度上减少锯齿的程度,曲面看上去平滑很多。

2.使用Bezier曲面代替传统方法
使用Bezier曲面代替传统的方法绘制,效果会好很多,即使不绘制平滑曲线,效果好很多。

3.使用多重采样Multisampling(来自 NeHe 教程 46 课)
多重采样是是OpenGL的扩展功能,在使用多重采样时,必须在窗口创建时告诉它使用多重采样,典型的步骤如下:
1)创建一个窗口
2)查询是否支持多重采样
3)如果支持删除当前的窗口,使用支持多重采样的格式创建窗口
4)如果我们想使用多重采样,仅仅启用它既可。
经过多重采样处理后的渲染效果是很明显的,可以看到锯齿明显减少很多,当然,不能完全依赖多重采样,本身曲面模拟的合理性也是非常重要的,但是实际上一些机器的显卡不支持这个扩展,比如很多的办公电脑,那就没办法了。
exceed_me 2011-09-22
  • 打赏
  • 举报
回复
没人回答啊!
HollyCpp 2011-09-21
  • 打赏
  • 举报
回复
楼主已经看过了,那应该就不行了。我再找找。
HollyCpp 2011-09-21
  • 打赏
  • 举报
回复
听说OpenGL那个抗锯齿是硬件依赖的,不行的话是不是得考虑自己实现,还没试过,只搜到这个,楼主看看有没有用。

http://glprogramming.com/red/chapter06.html
exceed_me 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dizuo 的回复:]

NeHe中有一个课将全屏抗锯齿。
[/Quote]

看过了,我电脑显卡不支持!
ryfdizuo 2011-09-21
  • 打赏
  • 举报
回复
NeHe中有一个课将全屏抗锯齿。
exceed_me 2011-09-21
  • 打赏
  • 举报
回复
发现一个问题,使用如下方法:


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


设置多边形填充模式为线型,即

glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);


效果如下:


发现可以有效的消除锯齿,但一旦开启使用实心填充后,就不会有任何效果!这是为何?

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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