当前位置:
文档之家› 计算机图形学(OpenGL总结)
计算机图形学(OpenGL总结)
:
<库前缀><根命令><可选的参数个数><可选的参数类型>
例如函数glColor3f(…),gl表示这个函数来自库 gl.h,color表示该函数用于颜色设定,3f表示这个 函数采用了三个浮点数参数。
11
6、OpenGL中的颜色
在OpenGL中,一种颜色用红、绿、蓝成分的混合来 表示,每种成分的值范围是0.0到1.0 。
– Heidi主要应用于CAD和CAM技术中,如 AutoCAD、3D Studio以及3DS MAX。
– Heidi是专业性强的软件包,在CAD和CAM 领域应用比较广泛,在其它领域如多媒体或 游戏软件中应用较少。
5
一、图形软件包
• 3、OpenGL
– OpenGL是以SGI公司为首,联合IBM、Intel 等8家公司共同制定的3D图形标准。
第一步,选择一个编译环境,如VC++ 第二步,安装GLUT工具包 第三步,建立一个OpenGL工程 第四步,编译连接 第五步,执行程序
OpenGL初步编程
OpenGL库和头文件:
动态库:opengl32.dll glu32.dll glut32.dll 放入 windows\system32目录下
• #include <GL/glut.h> // glut.h includes gl.h and glu.h
• void display() { • ... •}
• void init() { • ... •}
void display() {
glClear( GL_COLOR_BUFFER_BIT); // Clear the frame buffer
glColor3f( 0.0, 1.0, 0.0); // Set current color to green
glBegin( GL_POLYGON); the triangle
glVertex2f( -0.7, -0.7); glVertex2f( 0.7, -0.7); glVertex2f( 0, 0.7);
– void glTranslate{f,d}(TYPE x, TYPE y, TYPE z);
• 函数功能:对局部坐标系进行平移。 • 输入参数:在坐标轴方向的平移量x,y和z。 • 输出参数:无 • 返回值:无
– void glScale{f,d}(TYPE x, TYPE y, TYPE z);
Main.c
• #include <GL/glut.h> • main(int argc 这自动包含了gl.h • int argc, char** argv) •{ • glutInit(&argc,argv); • glutInitDisplayMode(GLUT_SINGLE|GLU
T_RGB); • glutInitWindowSize(500,500); • glutInitWindowPosition(0,0);
• 函数功能:定义附加裁剪平面。 • 输入参数: 参数plane表示裁剪平面索引号
GL_CLIP_PLANEi (i取0到到 GL_MAX_CLIP_PLANES-1 之间的整数), 参数 equation表示三维平面方程Ax+By+Cz+D=0的系 数A,B,C和D构成的数组。 • 输出参数:无 • 返回值:无
– 辅助库
• 提供窗口管理函数、事件处理函数和简单模型制作函数。 这些函数以“aux”为前缀。
7
二、用VC++编写OpenGL程序
• 2、帧缓存
– 在OpenGL中,帧缓存由颜色缓存、深度缓 存、模板缓存和累积缓存组成。
• 颜色缓存:用于存储每个像素点的颜色,包括左 前、(左后、右前、右后)和辅助颜色缓存。
静态库:opengl32.lib glu32.lib glut32.lib放入VC安 装目录的LIB目录下
头文件:gl.h glu.h glut.h放入VC安装目录的 Include\GL文件夹下
程序结构
•绝大多数OpenGL程序具有类似的结构, 包含下 述函数 ➢main(): ➢定义回调函数 ➢打开一个或多个具有指定属性的窗口 ➢进入事件循环(最后一条可执行语句) ➢init(): 设置状态变量 ➢视图
– void glEnd(void);
• 函数功能:定义图元,图元顶点序列结束。 • 输入:无 • 输出:无 • 返回值:无
32
四、图元绘制
• 2、画点
– void glPointSize(GLfloat size);
• 深度缓存:用于存储每个像素点的深度值。 • 模板缓存:用于将作图限制在屏幕中的某些部分。 • 累积缓存:在RGBA模式中,用于将一系列图像
累加成一幅图像。
• 3、建立OpenGL控制台应用程序(.NET)
8
• (4)OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut
数据类型 黑 红 绿 黄 紫 青 深灰
红色成分 0.0 1.0 0.0 1.0 1.0 0.0 0.25
绿色成分 0.0 0.0 1.0 1.0 0.0 1.0 0.25
蓝色成分 0.0 0.0 0.0 0.0 1.0 1.0 0.25
12
OpenGL初步编程
在Windows下开发和创建一个OpenGL程 序的基本步骤:
– void glOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
21
三、图形变换
– 正射投影
top far
left right
view direction bottom
near
22
三、图形变换
– 正射投影矩阵
三、图形变换
• 1、投影
– void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
• 函功能:用一个正射投影矩阵右乘当前投影矩 阵。
• 输入参数:裁剪面left,right,bottom,top,zNear,zFar。 • 输出参数:无 • 返回值:无
• Windows专用函数
• API
9
4、OpenGL中的数据类型
数据类型
GLbyte GLshort GLint,GLsizei GLfloat,GLclampf GLdouble,GLclampd GLubyte,GLboolean GLshort GLuint,GLenum, GLbitfield
内部表示法 8位整数 16位整数 32位整数 32位浮点数 64位浮点数 8位无符号整数 16位无符号整数 32位无符号整数
定义为C类型 signed char short long float double unsigned char unsigned short unsigned long
10
5、函数命名约定 OpenGL函数都遵循一个命名约定,即采用以下格式
计算机图形学OpenGL总结
主讲人:桂进斌
1
• 参考书
– 1、OpenGL编程指南(第八版),Dave Shreiner 等(李军等译),机械工业出版社,2014年。
– 2、计算机图形学(第四版),Donald Hearn,电 子工业出版社,2014年。
2
学习内容
• 1、图形软件包 • 2、用VC++编写OpenGL程序 • 3、图形变换 • 4、图元绘制 • 5、颜色和光照 • 6、混合、反走样和雾化 • 7、显示列表、位图和图像 • 8、纹理映射 • 9、复杂图形绘制
29
三、图形变换
• 4、几何变换
– void glRotate{f,d}(TYPE angle, TYPE x, TYPE y, TYPE z);
• 函数功能:对局部坐标系进行旋转。 • 输入参数:旋转角度angle,旋转轴方向矢量(x,y,z)。 • 输出参数:无 • 返回值:无
30
三、图形变换
– OpenGL与硬件无关、独立于操作系统、支 持网络运行。
6
二、用VC++编写OpenGL程序
• 1、OpenGL函数库
– 基本库
• 基本库是OpenGL的核心函数库。所有OpenGL操作都可用 这些函数来实现。可以在平台之间移植。这些函数以“gl” 为前缀。
– 实用库
• 实用库建立在基本库的基础之上,目的是为了减轻使用者 的编程负担。这些函数以“glu”为前缀。
• 函数功能:对局部坐标系进行缩放。 • 输入参数:在坐标轴方向的缩放量x,y和z。 • 输出参数:无 • 返回值:无
31
四、图元绘制
• 1、图元定义
– void glBegin(GLenun mode);
• 函数功能:定义图元,图元顶点序列开始。 • 输入:图元类型 • 输出:无 • 返回值:无
• 函数功能:在窗口中定义一个视区。 • 输入参数:视区左下角坐标(x,y),视区的宽width,
视区的高height。 • 输出参数:无 • 返回值:无
28
三、图形变换
• 3、裁剪变换
– void glClipPlane(GLenum plane,const GLdouble *equation);
23
三、图形变换
– void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
• 函数功能:设置一个透视投影矩阵。 • 输入参数:视域的角度fovy,视域宽与高的比率,