计算机图形学(OpenGL总结)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据类型 黑 红 绿 黄 紫 青 深灰
红色成分 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
Leabharlann Baidu
三、图形变换
– 正射投影
top far
left right
view direction bottom
near
22
三、图形变换
– 正射投影矩阵
静态库:opengl32.lib glu32.lib glut32.lib放入VC安 装目录的LIB目录下
头文件:gl.h glu.h glut.h放入VC安装目录的 Include\GL文件夹下
程序结构
•绝大多数OpenGL程序具有类似的结构, 包含下 述函数 ➢main(): ➢定义回调函数 ➢打开一个或多个具有指定属性的窗口 ➢进入事件循环(最后一条可执行语句) ➢init(): 设置状态变量 ➢视图
// Draw
void init() { glClearColor( 0.0, 0.0, 0.0, 0.0); // Set the clear color to black
// Specify the boundaries of the viewing window glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); // The para
are: (left, right, bottom, top)
glMatrixMode(GL_MODELVIEW); }
int main( int argc, char **argv) { glutInit( &argc, argv); // Initialize GLUT function callings
三、图形变换
• 1、投影
– void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
• 函数功能:用一个正射投影矩阵右乘当前投影矩 阵。
• 输入参数:裁剪面left,right,bottom,top,zNear,zFar。 • 输出参数:无 • 返回值:无
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);
24
三、图形变换
– void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
• 函数功能:用一个透视投影矩阵右乘当前投影矩 阵。
• 输入参数:裁剪面left,right,bottom,top,到近和远 裁剪面的距离zNear和zFar。
:
<库前缀><根命令><可选的参数个数><可选的参数类型>
例如函数glColor3f(…),gl表示这个函数来自库 gl.h,color表示该函数用于颜色设定,3f表示这个 函数采用了三个浮点数参数。
11
6、OpenGL中的颜色
在OpenGL中,一种颜色用红、绿、蓝成分的混合来 表示,每种成分的值范围是0.0到1.0 。
29
三、图形变换
• 4、几何变换
– void glRotate{f,d}(TYPE angle, TYPE x, TYPE y, TYPE z);
• 函数功能:对局部坐标系进行旋转。 • 输入参数:旋转角度angle,旋转轴方向矢量(x,y,z)。 • 输出参数:无 • 返回值:无
30
三、图形变换
3
一、图形软件包
• 1、Direct 3D和DirectX
– DirectX是微软公司的多媒体应用软件包, Direct 3D是其中的一部分。DirectX支持图形、 音响、应用程序安装和设备管理等。
– Direct 3D至少支持游戏或其他应用中的12种 3D图形效果处理。
4
一、图形软件包
• 2、Heidi
23
三、图形变换
– void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
• 函数功能:设置一个透视投影矩阵。 • 输入参数:视域的角度fovy,视域宽与高的比率,
视点到近和远裁剪面的距离zNear和zFar。 • 输出参数:无 • 返回值:无
– void glTranslate{f,d}(TYPE x, TYPE y, TYPE z);
• 函数功能:对局部坐标系进行平移。 • 输入参数:在坐标轴方向的平移量x,y和z。 • 输出参数:无 • 返回值:无
– void glScale{f,d}(TYPE x, TYPE y, TYPE z);
第一步,选择一个编译环境,如VC++ 第二步,安装GLUT工具包 第三步,建立一个OpenGL工程 第四步,编译连接 第五步,执行程序
OpenGL初步编程
OpenGL库和头文件:
动态库:opengl32.dll glu32.dll glut32.dll 放入 windows\system32目录下
– Heidi主要应用于CAD和CAM技术中,如 AutoCAD、3D Studio以及3DS MAX。
– Heidi是专业性强的软件包,在CAD和CAM 领域应用比较广泛,在其它领域如多媒体或 游戏软件中应用较少。
5
一、图形软件包
• 3、OpenGL
– OpenGL是以SGI公司为首,联合IBM、Intel 等8家公司共同制定的3D图形标准。
• 输出参数:无 • 返回值:无
25
三、图形变换
– 透视投影(glFrustum)
left top
right
bottom
near
far
view point
26
三、图形变换
– 透视投影(glFrustum)矩阵
27
三、图形变换
• 2、视区变换
– void glViewport(GLint x, GLint y, GLint width, GLint height);
– OpenGL与硬件无关、独立于操作系统、支 持网络运行。
6
二、用VC++编写OpenGL程序
• 1、OpenGL函数库
– 基本库
• 基本库是OpenGL的核心函数库。所有OpenGL操作都可用 这些函数来实现。可以在平台之间移植。这些函数以“gl” 为前缀。
– 实用库
• 实用库建立在基本库的基础之上,目的是为了减轻使用者 的编程负担。这些函数以“glu”为前缀。
• 函数功能:定义附加裁剪平面。 • 输入参数: 参数plane表示裁剪平面索引号
GL_CLIP_PLANEi (i取0到到 GL_MAX_CLIP_PLANES-1 之间的整数), 参数 equation表示三维平面方程Ax+By+Cz+D=0的系 数A,B,C和D构成的数组。 • 输出参数:无 • 返回值:无
• #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
– 辅助库
• 提供窗口管理函数、事件处理函数和简单模型制作函数。 这些函数以“aux”为前缀。
7
二、用VC++编写OpenGL程序
• 2、帧缓存
– 在OpenGL中,帧缓存由颜色缓存、深度缓 存、模板缓存和累积缓存组成。
• 颜色缓存:用于存储每个像素点的颜色,包括左 前、(左后、右前、右后)和辅助颜色缓存。
– void glEnd(void);
• 函数功能:定义图元,图元顶点序列结束。 • 输入:无 • 输出:无 • 返回值:无
32
四、图元绘制
• 2、画点
– void glPointSize(GLfloat size);
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);
计算机图形学OpenGL总结
主讲人:桂进斌
1
• 参考书
– 1、OpenGL编程指南(第八版),Dave Shreiner 等(李军等译),机械工业出版社,2014年。
– 2、计算机图形学(第四版),Donald Hearn,电 子工业出版社,2014年。
2
学习内容
• 1、图形软件包 • 2、用VC++编写OpenGL程序 • 3、图形变换 • 4、图元绘制 • 5、颜色和光照 • 6、混合、反走样和雾化 • 7、显示列表、位图和图像 • 8、纹理映射 • 9、复杂图形绘制
• 函数功能:在窗口中定义一个视区。 • 输入参数:视区左下角坐标(x,y),视区的宽width,
视区的高height。 • 输出参数:无 • 返回值:无
28
三、图形变换
• 3、裁剪变换
– void glClipPlane(GLenum plane,const GLdouble *equation);
// Set window size (width, height) in number of pixels glutInitWindowSize( 400, 400);
// Set window position, from the left and top of the screen, glutInitWindowPosition( 200, 100); // in numbers of pixels
• 深度缓存:用于存储每个像素点的深度值。 • 模板缓存:用于将作图限制在屏幕中的某些部分。 • 累积缓存:在RGBA模式中,用于将一系列图像
累加成一幅图像。
• 3、建立OpenGL控制台应用程序(.NET)
8
• (4)OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut
• 函数功能:对局部坐标系进行缩放。 • 输入参数:在坐标轴方向的缩放量x,y和z。 • 输出参数:无 • 返回值:无
31
四、图元绘制
• 1、图元定义
– void glBegin(GLenun mode);
• 函数功能:定义图元,图元顶点序列开始。 • 输入:图元类型 • 输出:无 • 返回值:无
内部表示法 8位整数 16位整数 32位整数 32位浮点数 64位浮点数 8位无符号整数 16位无符号整数 32位无符号整数
定义为C类型 signed char short long float double unsigned char unsigned short unsigned long
10
5、函数命名约定 OpenGL函数都遵循一个命名约定,即采用以下格式
• Windows专用函数
• API
9
4、OpenGL中的数据类型
数据类型
GLbyte GLshort GLint,GLsizei GLfloat,GLclampf GLdouble,GLclampd GLubyte,GLboolean GLshort GLuint,GLenum, GLbitfield