OpenGL编程.doc

上传人:11****ws 文档编号:2992990 上传时间:2019-05-16 格式:DOC 页数:86 大小:226KB
下载 相关 举报
OpenGL编程.doc_第1页
第1页 / 共86页
OpenGL编程.doc_第2页
第2页 / 共86页
OpenGL编程.doc_第3页
第3页 / 共86页
OpenGL编程.doc_第4页
第4页 / 共86页
OpenGL编程.doc_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、OPENGL 编程类似 C 编程,实际接口就是 C,所以熟悉 C 是必要的 一般编程可用到的函数库包括: OPENGL 实用库:函数以 glu 开头 OPENGL 辅助库:函数以 aux 开头 Windows 专用函数库:函数以 wgl 开头 Win32API:无专用前缀 OPENGL 中有 115 个核心函数,可以在任何 OPENGL 平台上使用 OPENGL 实用库比上面这 115 个函数高一级,提供高级调用 OPENGL 辅助库本来是提供初学者入门的函数,不保证在任何平台的使用 但恰好可以在 WIN32 下使用,所以本讲座将大量引用 WIN32 下 OPENGL 编程有两个方便途径: 1

2、 使用辅助库 2 使用 C+基于消息驱动的编程 显然 1 要简单一些,入门从这里开始吧。 用之前的准备 1 首先你需要下列*.lib 包含在你的工程中: opengl32.lib glu32.lib glaux.lib 本讲座所有例子“将” 在 VC5 下调试通过,所以从 project-setting-link-general-object/libary modules 中加入上面三个*.lib (这些 LIB,VC4 以上版本已经自带,加入即可,不用在四处搜寻文件) 2 另外在你的运行程序路径下或win95system下你需要一些*.dll 动态连接库 opengl32.dll glu32

3、.dll rxddi.dll mga.drv这里我将给出一个小例子让大家熟悉用辅助库的编程结构: / GLOS.H / / This is an OS specific header file /判别操作系统的基本头文件 #include / disable data conversion warnings #pragma warning(disable : 4244) / MIPS #pragma warning(disable : 4136) / X86 #pragma warning(disable : 4051) / ALPHA / /opengl.cpp /主程序 #include

4、“glos.h“ #include #include #include “windows.h“ void main(void) /*初始化:*/ auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); /窗口显示单缓存和 RGB(彩色)模式 auxInitPosition(0,0,500,500); /大小 x=500 y=500 (0, 0)是屏幕左上点 auxInitWindow(“sample1“); /窗口初始化,参数是标题 glClearColor(0.0,0.0,0.0,0.0); /将窗口清为黑色 glClear(GL_COLOR_BUFFER_BIT)

5、; /将颜色缓存清为 glClearColor 命令所设置的颜色 /即背景色 /*绘图*/ glColor3f(1.0,0.0,0.0); /选颜色(R,G,B) ,参数 0 #include #include “windows.h“ void myinit(void); void CALLBACK display(void); void CALLBACK reshape(GLsizei w,GLsizei h); /这里不用管 reshape(),只是一个用于窗口改变大小时的处理 /与绘图无关,后面会讲到 /这里的重点是 display(),请注意绘图的方法 void myinit(void

6、) /*初始化:*/ auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); /窗口显示单缓存和 RGB(彩色)模式 auxInitPosition(0,0,500,500); /大小 x=500 y=500 (0, 0)是屏幕左上点 auxInitWindow(“sample1“); /窗口初始化,参数是标题 glClearColor(0.0,0.0,0.0,0.0); /将窗口清为黑色 glClear(GL_COLOR_BUFFER_BIT); /将颜色缓存清为 glClearColor 命令所设置的颜色 /即背景色 void CALLBACK reshape(G

7、Lsizei w,GLsizei h) glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w #include #include “windows.h“ void myinit(void); void CALLBACK display(void); void CALLBACK reshape(GLsizei w,GLsizei h); / void myinit(void) /*初始化:*/ auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); /窗口显示单缓存和 RGB(彩

8、色)模式 auxInitPosition(0,0,500,500); /大小 x=500 y=500 (0, 0)是屏幕左上点 auxInitWindow(“sample1“); /窗口初始化,参数是标题 glClearColor(0.0,0.0,0.0,0.0); /将窗口清为黑色 glClear(GL_COLOR_BUFFER_BIT); /将颜色缓存清为 glClearColor 命令所设置的颜色 /即背景色 / void CALLBACK reshape(GLsizei w,GLsizei h) /设定视口 X Y 方向不要大于 500 单位 if(w500 if(w500 /进入世界

9、坐标系,准备变换 /必要的步骤,初始化变换矩阵步骤: 1 确定类型 2 清成单位阵 glMatrixMode(GL_PROJECTION); glLoadIdentity(); /定义一个合适的视景体 if(w=h) glOrtho(-20.0,20.0,-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-50.0,50.0); else glOrtho(-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-20.0,20.0,-50.0,50.0); /把变换结果返回视点

10、坐标系 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); / /画三棱锥,功能同上一讲 void draw(void) glBegin(GL_TRIANGLE_STRIP); glColor3f(1.0,0.0,0.0); glVertex3f(15.0,0.0,0.0); glColor3f(0.0,1.0,0.0); glVertex3f(-15.0,0.0,0.0); glColor3f(0.0,0.0,1.0); glVertex3f(0.0,15.0,15.0); / glColor3f(0.0,1.0,1.0); glVertex3f(10

11、.0,15.0,-15.0); / glColor3f(1.0,1.0,0.0); glVertex3f(15.0,0.0,0.0); / glEnd(); / void CALLBACK display(void) /按上个例子中方法画第一个三棱锥 glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0,0.0,-25.0); draw(); /开始画第二个三棱锥 /变换开始,清变换矩阵为单位阵 glLoadIdentity(); /先沿 X Y Z 平移-

12、5 -10 -4,屏幕上看就是向左下移动 /Z 方向由于是平行投影,没有“近大远小” 所以看不出效果 glTranslatef(-5.0,-10.0,-4.0); /再沿 Z 轴转 90 度 glRotatef(90,0.0,0.0,1.0); draw(); /绘图工作完成,强制绘图结束 glFlush(); void main(void) myinit(); auxReshapeFunc(reshape); auxMainLoop(display); /sample ends here / 如果大家运行一下就知道上述函数的作用,无非是把物体移动、转动、变形 缩放、透视. 我想有了前 3 讲

13、,OPENGL 的基本原理已经如此了 它就是提供了一个标准的计算机图形学所使用的数学模型到显示的接口, 只要具备图形学知识,掌握 OPENGL API 函数使用,绘图很 EASY 啦 基础部分已经完毕,慢慢再来谈高级一些的绘图功能如: 纹理、光源、动画. 前面三篇文章已经把 OPENGL 的编程基本结构描述完毕。以后 会在这个基础上逐渐深化,不断增添新内容。这一篇是讲述 键盘操作和动画基础(实际还差的远哪) 。只是个简单的能 由用户控制的动画,让物体前后移动,左右旋转。是我们自 己的第一个 QUAKE!当然这个版本谁买谁上当,呵呵。 这篇的另一个目的就是加深前面对于 CALLBACK 函数的认识以 及对于变换的直观解释,任何变换你都可以从屏幕上通过自 己的操作看出来: 我只把和以前变化的部分标记中文解释

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。