MFC中OpenGL全屏采样抗锯齿失败
其实OpenGL的全屏抗锯齿就是开启多重采样。
在使用glut的时候,很方便就能实现。
只要启用多重采样缓冲就行了。但是,在MFC窗口中的实现就很麻烦了。 首先,在MFC窗口中渲染OpenGL就需要比较麻烦的设置。
OnDraw()是由OnPaint()内部调用的,系统只有在收到WM_PAINT消息后才调用OnPaint()。你可以试一试手动用CWnd::UpdateWindow()发出WM_PAINT消息,看看有没有图案;
你还可以试一试不在OnCreate()里获取DC,而在OnInitialUpdate()里获取DC,可能窗口创建完成后还不能马上获得DC;
其实,如果你能看到黑色背景,就说明已经在绘图了。只是因为观察点/视截体设置不当,才看不到三角形
另外,glClearColor()只需要在初始化阶段调用一次即可
首先,在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的话效果一般般。
笔记本处理器i5-8300H @2.30GHz 2.30GHz,这里为什么会有两个2.3GHZ...
OpenGL支持:4.5 显示支持数量:3 设备ID:0x3E9B 显卡视频最大内存:64GB 图形输出最大分辨率:4096×2304 支持英特尔Quick Sync Video,InTru 3D技术,无线显示技术,清晰视频核芯技术,清晰视频技术纠错 技术参数 睿频加速技术支持,2.0 超线程技术支持 虚拟化技术Intel VT-x 指令集64bit 64位处理...
求一个pudn的下载账号
http:\/\/download.pudn.com\/downloads37\/sourcecode\/windows\/bitmap\/35738603OpenGL%B6%AF%BB%AD%D1%DD%CA%BE%28%B0%FC%BA%AC%B4%FA%C2%EB%29.rar http:\/\/download.pudn.com\/downloads104\/sourcecode\/windows\/opengl\/41695030nature.rar http:\/\/download.pudn.com\/downloads95\/sourcecode\/...
i5四代是核显吗?
e31226v3核显型号普通i5四代集成的核心显卡是HD Graphics 4600。E3 V3 FCLGA1150封装接口,尺寸37.5×37.5毫米。芯片组标配C226、C224、C222,但如果有合适的BIOS,一样可以用在8系列桌面主板上。需要特别注意的是,C220系列芯片组中只有C226支持开启核显,使用其它三款都必须搭配独显。核显自然是数字...
稻祁利君: 其实OpenGL的全屏抗锯齿就是开启多重采样.在使用glut的时候,很方便就能实现.只要启用多重采样缓冲就行了.但是,在MFC窗口中的实现就很麻烦了.首先,在MFC窗口中渲染OpenGL就需要比较麻烦的设置.所以,需要在设置...
德令哈市18327445891: OpenGL 多重采样 抗锯齿,该怎么解决 - ?
稻祁利君: 其实OpenGL的全屏抗锯齿就是开启多重采样. 在使用glut的时候,很方便就能实现. 只要启用多重采样缓冲就行了.但是,在MFC窗口中的实现就很麻烦了. 首先,在MFC窗口中渲染OpenGL就需要比较麻烦的设置.
德令哈市18327445891: mfc怎么全屏 - ?
稻祁利君: 方法一:在Dialog::OnInitDialog()中加入:ModifyStyle(WS_CAPTION,0,0); // 如果只是要普通的全屏,不想去掉标题栏,就不用第一个语句 SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0); 不过这种方法不方便调整控件的位置,...
德令哈市18327445891: 如何在MFC中利用OpenGL实现三维图形的绘制 - ?
稻祁利君: 你的思路是对的,要在CDiagView中调用 COpenglView的绘图函数才行.在CDiagView中通过COpenglView的指针调用Invalidata()就OK了m_pCOpenglView->Invalidata() 补充回答:我所说的 m_pCOpenglView 是你自己声明一个...
德令哈市18327445891: 在MFC中使用opengl作图 - ?
稻祁利君: MFC的程序太大,文件太多,这里贴不完,你可以去这个地址看看,学Opengl我是从这里入门的:http://nehe.gamedev.net 一个MFC的程序部分如下: #include "stdafx.h" #include "NeheMFC.h" #include "NeheWindow.h" #include "...
德令哈市18327445891: 在mfc 使用opengl窗口 - ?
稻祁利君: ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行.控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件.这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法.因此,开发面向Web的ActiveX控件比开发桌面的控件还要简单些,所复杂的是如何将该控件很好地嵌入主页,使用户能正常浏览.
德令哈市18327445891: 关于MFC下的opengl绘图?? - ?
稻祁利君: 改变参数以后添加Invalidate(); 该函数的作用是使整个窗口客户区无效.窗口的客户区无效意味着需要重绘 Invalidate()会给窗口触发一条WM_PAINT消息,然后MFC中就会响应OnDraw().
德令哈市18327445891: 求大牛怎样将openGl移植到MFC中实现曲面阴影,回答了以后觉得可以得高分 - ?
稻祁利君: 相当有挑战的题目,难度一:就是脚下加黑坨;难度二:外轮廓投影难度三:精细投影难度四:不同光源下的阴影变换无论你实现了哪一级,都是我敬佩的对象.呵呵,帮不了你,只能给个建议方向:GLSL,体光,二次渲染,想想都头大....等有空再说吧.
德令哈市18327445891: 视频渲染D3D模式是用显卡进行处理 硬解也是用显卡进行处理 两者有什么区别吗? - ?
稻祁利君: 编程文学物理游戏 8 人赞同了该回答 都是用显卡加速的,区别最主要的是DirectDraw支持显存位图,GDI里位图只能在内存里,另外DirectDraw处理方式更贴近硬件,解析更快.Windows Vista开始GDI丧失显卡加速. ↓↓↓↓↓↓↓↓某大神博客的一个解释↓↓↓↓↓↓↓ DirectDraw GDI的区别之一 编辑于 2016-12-24
德令哈市18327445891: 在MFC中实现全屏功能的代码怎样写??
稻祁利君:很多的播放器都有快捷键控制窗口以全屏幕的方式显示.给应用程序加上全屏幕的功能,并不需要很多的代码,比如给一个基于对话框的应用程序加上全屏功能只需要以下少量代码就可以工作了. 具体参照:在百度 《it人家 》社区 第一页第一个,其中的(c\c++)板块中