资源描述:
《openggl画图初学必看.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、OpenGL作图非常方便,故日益流行,但对许多人来说,是在微机上进行的,首先碰到的问题是,如何适应微机环境。这往往是最关键的一步,虽然也是最初级的。一般的,我不建议使用glut包.那样难以充分发挥Windows的界面上的功能.下面介绍如何在VC++上进行OpenGL编程。OpenGL绘图的一般过程可以看作这样的,先用OpenGL语句在OpenGL的绘图环境RenderContext(RC)中画好图,然后再通过一个Swapbuffer的过程把图传给操作系统的绘图环境DeviceContext(DC)中,实实在在地画出到屏幕上.下面以画一条Bezier曲线为例,详细介绍VC++上OpenGL编
2、程的方法。文中给出了详细注释,以便给初学者明确的指引。一步一步地按所述去做,你将顺利地画出第一个OpenGL平台上的图形来。一、产生程序框架Test.dswNewProject
3、MFCApplicationWizard(EXE)
4、"Test"
5、OK*注*:加“”者指要手工敲入的字串二、导入Bezier曲线类的文件用下面方法产生BezierCurve.hBezierCurve.cpp两个文件:WorkSpace
6、ClassView
7、TestClasses
8、<右击弹出>NewClass
9、GenericClass(不用MFC类)
10、"CBezierCurve"
11、OK三、编辑好Bezier曲线类的定
12、义与实现写好下面两个文件:BezierCurve.hBezierCurve.cpp四、设置编译环境:1.在BezierCurve.h和TestView.h内各加上:#include#include#include2.在集成环境中Project
13、Settings
14、Link
15、Object/librarymodule
16、"opengl32.libglu32.libglaux.lib"
17、OK五、设置OpenGL工作环境:(下面各个操作,均针对TestView.cpp)1.处理PreCreateWindow():设置OpenGL绘图窗口的风
18、格cs.style
19、=WS_CLIPSIBLINGS
20、WS_CLIPCHILDREN
21、CS_OWNDC;2.处理OnCreate():创建OpenGL的绘图设备。OpenGL绘图的机制是:先用OpenGL的绘图上下文RenderingContext(简称为RC)把图画好,再把所绘结果通过SwaPBuffer()函数传给Window的绘图上下文DeviceContext(简记为DC).要注意的是,程序运行过程中,可以有多个DC,但只能有一个RC。因此当一个DC画完图后,要立即释放RC,以便其它的DC也使用。在后面的代码中,将有详细注释。intCTestView::OnCreate(LPCRE
22、ATESTRUCTlpCreateStruct){if(CView::OnCreate(lpCreateStruct)==-1)return-1;myInitOpenGL();return0;}voidCTestView::myInitOpenGL(){m_pDC=newCClientDC(this);//创建DCASSERT(m_pDC!=NULL);if(!mySetupPixelFormat())//设定绘图的位图格式,函数下面列出return;m_hRC=wglCreateContext(m_pDC->m_hDC);//创建RCwglMakeCurrent(m_pDC->m_hDC
23、,m_hRC);//RC与当前DC相关联}//CClient*m_pDC;HGLRCm_hRC;是CTestView的成员变量BOOLCTestView::mySetupPixelFormat(){//我们暂时不管格式的具体内容是什么,以后熟悉了再改变格式staticPIXELFORMATDESCRIPTORpfd={sizeof(PIXELFORMATDESCRIPTOR),//sizeofthispfd1,//versionnumberPFD_DRAW_TO_WINDOW
24、//supportwindowPFD_SUPPORT_OPENGL
25、//supportOpenGLPFD_DOUB
26、LEBUFFER,//doublebufferedPFD_TYPE_RGBA,//RGBAtype24,//24-bitcolordepth0,0,0,0,0,0,//colorbitsignored0,//noalphabuffer0,//shiftbitignored0,//noaccumulationbuffer0,0,0,0,//accumbitsignored32,//32-bitz-buffer0,//nos