windows/mfc程序中使用OpenGL的多重采样功能
学过opengl基础的人都知道,打开混合功能并调用glEnable(GL_POINT_SMOOTH)/glEnable(GL_LINE_SMOOTH)可以实现模型点/线的反走样功能,非常简单且效果不错。
但是对于实心多边形的支持却没有那么简单,单纯的调用 glEnable(GL_POLYGON_SMOOTH)发现并没有效果。
OpenGL对于多边形的反走样有另一个多重采样的特性支持——glEnable(GL_MULTISAMPLE)
但是当调用后发现还是不起作用,查阅资料后才发现在Windows程序中要想使用OpenGL的多重采样,需要额外的一些操作。
一般情况下MFC程序创建OpenGL环境
普通的Windows OpenGL程序在OnCreat()函数中完成环境初始化比较简单
int OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CWnd::OnCreate(lpCreateStruct);
PIXELFORMATDESCRIPTOR pfd;
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL
| PFD_DOUBLEBUFFER/* PFD_SUPPORT_GDI*/ | PFD_STEREO_DONTCARE;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cRedBits = 8;
pfd.cRedShift = 16;
pfd.cGreenBits = 8;
pfd.cGreenShift = 8;
pfd.cBlueBits = 8;
pfd.cBlueShift = 0;
pfd.cAlphaBits = 0;
pfd.cAlphaShift = 0;
pfd.cAccumBits = 64;
pfd.cAccumRedBits = 16;
pfd.cAccumGreenBits = 16;
pfd.cAccumBlueBits = 16;
pfd.cAccumAlphaBits = 0;
pfd.cDepthBits = 32;
pfd.cStencilBits = 8;
pfd.cAuxBuffers = 0;
pfd.iLayerType = PFD_MAIN_PLANE;