OpenGL 多重采样 抗锯齿,该怎么解决
答案:2 悬赏:30 手机版
解决时间 2021-03-06 13:33
- 提问者网友:轻浮
- 2021-03-05 19:21
OpenGL 多重采样 抗锯齿,该怎么解决
最佳答案
- 五星知识达人网友:酒醒三更
- 2021-03-05 19:57
其实OpenGL的全屏抗锯齿就是开启多重采样。
在使用glut的时候,很方便就能实现。
只要启用多重采样缓冲就行了。但是,在MFC窗口中的实现就很麻烦了。 首先,在MFC窗口中渲染OpenGL就需要比较麻烦的设置。
在使用glut的时候,很方便就能实现。
只要启用多重采样缓冲就行了。但是,在MFC窗口中的实现就很麻烦了。 首先,在MFC窗口中渲染OpenGL就需要比较麻烦的设置。
全部回答
- 1楼网友:妄饮晩冬酒
- 2021-03-05 20:59
其实opengl的全屏抗锯齿就是开启多重采样。在使用glut的时候,很方便就能实现。只要启用多重采样缓冲就行了。但是,在mfc窗口中的实现就很麻烦了。
首先,在mfc窗口中渲染opengl就需要比较麻烦的设置。所以,需要在设置opengl渲染环境的时候进一步处理。具体的来看下面一段代码吧。
这段代码就是mfc窗口创建的时候,设置opengl渲染环境的代码。
对于没有启用多重采样的情况,思路是先获取dc,然后调用choosepixelformat获取最佳像素格式,再调用setpixelformat设置像素格式,接着调用wglcreatecontext创建opengl渲染环境,最后调用wglmakecurrent设置opengl渲染环境。
如果启用了多重采样,代码逻辑就更加复杂了。最恶心的一点是窗口必须创建2次。第一次按照常规思路设置好opengl渲染环境,然后调用函数initmultisample判断是否支持多重采样,如果支持则销毁窗口,重新创建一次。第二次的思路是按照多重采样初始化得到的像素格式设置好opengl渲染环境的像素格式,其余的设置和常规的一样。具体参见下面的代码。
show source
那么函数initmultisample是怎么来的了。nehe刚好有一节课是讲这个的,我是从那里下载得到的。该函数代码如下。
show source
该函数的使用还是很简单的,基本上是修改了2个全局变量,arbmultisamplesupported判断是否支持多重采样,arbmultisampleformat则是对应的像素格式。我在代码中注释了一行:wgl_samples_arb,16,//16设置了抗锯齿的质量。这里貌似可以修改数字的大小,据说一般显卡都支持到16,16的情况下,抗锯齿很好了,4的话效果一般般。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯