VC++6.0运行OpenGL程序初始化.doc

上传人:cn****1 文档编号:560364887 上传时间:2023-12-10 格式:DOC 页数:3 大小:30.50KB
返回 下载 相关 举报
VC++6.0运行OpenGL程序初始化.doc_第1页
第1页 / 共3页
VC++6.0运行OpenGL程序初始化.doc_第2页
第2页 / 共3页
VC++6.0运行OpenGL程序初始化.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《VC++6.0运行OpenGL程序初始化.doc》由会员分享,可在线阅读,更多相关《VC++6.0运行OpenGL程序初始化.doc(3页珍藏版)》请在金锄头文库上搜索。

1、首先, 我们需要在Visual C+ 中创建一个工程。 假如你不知道怎么做的话, 我想你应该先学习 Visual C+ 而不是 OpenGL。 可供下载的代码是用 Visual C+ 6.0 写成的。 在某些版本的 VC+ 中, 需要把 bool 改为 BOOL, true 改为 TRUE, false 改为 FALSE。 做了上述修改之后, 代码可以在 Visual C+ 4.0和5.0 中编译通过。 在Visual C+ 中当你创建了一个新的 Win32 程序(并非控制台程序) 之后, 你还需要链接 OpenGL 的库文件。 操作步骤是: Project- Settings, 点击 LIN

2、K 标签, 在 “Object/Library Modules” 下面那一行的开始处(在kernel32.lib之前) 增添 OpenGL32.lib, GLu32.lib 和 GLaux.lib, 完成之后点击 OK 按钮。 现在你已经准备好来书写一个 OpenGL 视窗程序了。 代码的前4行包含了我们所需库的头文件, 如下: #include / Header File For Windows #include / Header File For The OpenGL32 Library #include / Header File For The GLu32 Library #inclu

3、de / Header File For The GLaux Library 然后我们需要初始化所有要用的变量。 因为这个程序仅仅创建一个空的 OpenGL 窗口, 所以需要初始化的变量并不多。 一些变量的初始化工作是十分重要的, 它们将在以后的每个 OpenGL 程序中被沿用。 下面第一行代码设置一个 Rendering Context (渲染描述表,着色描述表,渲染上下文), 每一个 OpenGL 程序都会连接一个 Rendering Context, Rendering Context 将 OpenGL调用 连接到 Device Context (设备描述表,设备上下文)。OpenGL

4、Rendering Context 在这里被定义为 hRC。 要在窗口中进行绘制我们还需要创建一个 Device Context, 这是第二行代码所做的事情, Windows Device Context 在这里被定义为 hDC。 DC 将窗口连接到 GDI (Graphics Device Interface, 图形设备接口), 而 RC 将 OpenGL 连接到 DC。 第三行代码中的 hWnd 变量用于保存 Windows 分配给我们的窗口句柄, 而第四行用于保存我们的应用程序实例句柄。 HGLRC hRC=NULL; / Permanent Rendering Context HDC

5、hDC=NULL; / Private GDI Device Context HWND hWnd=NULL; / Holds Our Window Handle HINSTANCE hInstance; / Holds The Instance Of The Application 下面第一行代码设置一个用于接收键盘输入的数组。 这是接收键盘输入的多种方法中的其中一种, 比较可靠, 而且支持同时按下多个键。 active 变量用于通知我们程序是否被最小化了。 如果窗口被最小化了, 我们可以做任何事情, 挂起程序或者退出程序。 我比较喜欢挂起程序, 当最小化的时候程序在后台不会保持运行状态。 变

6、量fullscreen 可以反映出我们的程序是否运行于全屏幕模式, 是的话它就为 TRUE; 如果运行于窗口模式, 它就为 FALSE。 创建这个全局变量是十分有用的, 它让每个程序知道其自身是否运行于全屏幕模式。 bool keys256; / Array Used For The Keyboard Routine bool active=TRUE; / Window Active Flag Set To TRUE By Default bool fullscreen=TRUE; / Fullscreen Flag Set To Fullscreen Mode By Default 下面我们

7、需要声明窗口回调函数 WndProc()。 原因是 CreateGLWindow() 函数中有对其的引用, 但是 WndProc() 的函数体定义却又在 CreateGLWindow() 的后面。 我们知道在 C 语言中要使用一个函数的话函数必须在之前已经声明了, 所以这里我们要先声明 WndProc()。 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); / Declaration For WndProc 下一段代码的作用是当窗口大小被调整时 (对于窗口模式) 调整 OpenGL 场景的大小。 如果窗口大小并不能被调整 (例如全屏幕模

8、式的时候), 此段代码也至少会在程序首次运行的时候被调用一次, 用来设置透视。 OpenGL 场景会根据它的显示窗口的宽与高来做调整。 GLvoid ReSizeGLScene(GLsizei width, GLsizei height) / Resize And Initialize The GL Window if (height=0) / Prevent A Divide By Zero By height=1; / Making Height Equal One glViewport(0, 0, width, height); / Reset The Current Viewport

9、下面几行代码用于设置透视图, 用于实现现实世界近大远小的视觉效果。 基于窗口的宽与高, 透视被设置为 45 度视野。 值0.1f 和100.0f 指定了始点和末点, 也就是指定我们可以绘制的透视深度。 glMatrixMode(GL_PROJECTION) 设置当前矩阵为投影矩阵, 所以随后的两行代码都针对投影矩阵进行操作。 投影矩阵负责给我们的场景增加透视。 glLoadIdentity() 的功能是重置当前指定的矩阵为单位矩阵。 在glLoadIdentity() 之后我们为场景设置了透视图。 glMatrixMode(GL_MODELVIEW) 设置当前矩阵为模型视图矩阵,模型视图矩阵储

10、存了有关物体的信息。 然后我们重置了模型视图矩阵。你可能不知道为什么要这样做,不过没关系,我会在以后的教程中作解释。 现在你只需要知道,要完成一个漂亮的场景就必须这样做就可以了。 glMatrixMode(GL_PROJECTION); / Select The Projection Matrix glLoadIdentity(); / Reset The Projection Matrix / Calculate The Aspect Ratio Of The Window gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,10

11、0.0f); glMatrixMode(GL_MODELVIEW); / Select The Modelview Matrix glLoadIdentity(); / Reset The Modelview Matrix 接下来的这段代码中我们将完成对 OpenGL 的所有设置, 比如设置清除屏幕所用的颜色, 打开深度缓存(Depth Buffer), 打开平滑阴影等。 这段程序在 OpenGL 窗口创建完成之前不会被调用。 这段程序具有返回值, 但由于现在我们的初始化工作并不复杂, 所以现在可以不必关心这个返回值。 int InitGL(GLvoid) / All Setup For OpenGL Goes Here 下面这行代码用于打开平滑阴影。 平滑阴影会在多边形内精细地混合颜色, 和平滑光照。 关于平滑阴影的更多细节会在以后的教程中阐述。 glShadeModel(GL_SMOOTH); / Enables Smooth Shading

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号