OpenGL教程翻译 第六课 平移变换

OpenGL教程翻译 第六课 平移变换

原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载)

Background                                                  

这一教程我们来看一看如何在三维场景中对物体进行各式各样的变换,并且在保持场景的立体感的情况下将其渲染到屏幕上去!常见的方法是用矩阵表示每一个变换, 之后将它们挨个儿相乘,最后乘以顶点位置产生最后的结果!接下来的每一章都将着重介绍一种转变。

       这里我们来看一种沿着一个任意长度和方向的向量移动物体的平移转变!假定你想将左图的三角形移到右图的位置:

一个方法就是提供一种偏移向量(本例中是(1,1))作为一个一致变量传递给着色器,仅仅为每个需要处理的顶点加上这个偏移向量即可。然而,这与我们所想要的将一组矩阵通过相乘得到一个综合矩阵的思想背道而驰。除此之外,稍后你将看到平移通常并不是第一个变换,所以你得在平移前让位置向量乘上代表平移之前的变化的矩阵,然后乘上这个位置向量,最后乘上代表平移之后的转变的矩阵。所以说上面的方法太笨拙了。最好的方法是找到一个代表平移的矩阵,让它参与到所有矩阵的相乘中。但是你能找到一个矩阵,使得这个矩阵和左图三角形中底部的点(0,0)相乘后得到结果(1,1)吗?事实是你使用2D矩阵无法做到这一点,对于(0,0,0)用3D矩阵也不能做到这一点!总的来说,我们需要的是一个矩阵M,给定一个点P坐标(x,y,z)和一个向量V(v1,v2,v3)后,能提供M*P=P1(x+v1,y+v2,z+v3)。简单的来说就是矩阵M将P平移到p+v的位置。在P1中我们可以看到它的每个分量都是来自p的一个分量和v中与之相对应的分量之和。求和等式的左侧是根据单位矩阵得出的:

I*P=P(x,y,z)

所以看起来像是我们应该从单位矩阵开始,然后找出完成每个分量求和等式的右侧(...+V1,...+V2, ...+V3)的变化。让我们来看看这个被改进的单位矩阵的样子:


从这个计算我们可以得出两个结论:

1.      a,b,c,d,e和f必须是0,否则任意两个分量都将影响第三个分量(这样我们就背离了单位矩阵);

2.      因为x,y,z对所有三个分量都有影响,当他们全部为0时结果也将是0向量(所以我们仍然不能转化0向量)。

我们需要找到一个矩阵以满足下列右侧的计算:


所以我们需要在已知a-f为0的情况下找到上图所示加上v1-v3的方法。这样最后的结果将是我们平移后的向量。从这个等式看上去貌似我们需要给矩阵增加第四列,但是这样做的话我们的计算将是无效的,因为我们不能用3*4的矩阵乘上3*1的向量!矩阵相乘的规则是只允许n*m和m*n形式的矩阵相乘。所以我们不得不给我们的向量增加第四个分量。我们最好将向量的第四个分量设置为1,因为这样当我们将v1-v3放到矩阵的第四列时,相乘之后并不会改变v1、v2、v3的大小,因为它们与1相乘!但是由上面的规则可知,反过来4*1矩阵和3*4矩阵相乘仍然是无效的!通过给矩阵增加第四行使它成为一个4*4矩阵,这样就能够实现了!最后,这就是我们的平移矩阵:


现在,即使x、y和z是0我们仍然可以平移它们到任何位置。

       使用四维向量来表示三维向量的做法称作齐次坐标,这对3D图形来说普遍而又实用。向量的第四个分量称之为“w”。事实上,我们在以前教程中见到的着色器中的内置变量 gl_Position就是一个四维向量,w分量会在将3D场景投影到2D平面时起重要作用!通用的做法是:w=1表示点,为0表示向量。原因是点也可以被平移但是向量不行。你可以改变向量的长度和方向但是所有具有相同长度或方向的向量是被视为相同的,无论他们的起点在哪里!所以你可以简单地用原点作为所有向量的起点!设置w=0,乘以变换矩阵后的向量将是相同的向量。

Code Walkthru

structMatrix4f {
float m[4][4];
};

我们将一个4*4的矩阵定义添加到math_3d.h中。从现在起,它将被运用到大多数转变矩阵中。

GLuintgWorldLocation;

我们使用这个句柄来获取着色器中的世界矩阵一致变量!我们称之为“世界”是因为我们所做的是,在我们的虚拟世界坐标系统中将一个物体移动(转变)到我们想要的位置。

Matrix4fWorld;
World.m[0][0] = 1.0f; World.m[0][1] =0.0f; World.m[0][2] = 0.0f; World.m[0][3] = sinf(Scale);
World.m[1][0] = 0.0f; World.m[1][1] =1.0f; World.m[1][2] = 0.0f; World.m[1][3] = 0.0f;
World.m[2][0] = 0.0f; World.m[2][1] =0.0f; World.m[2][2] = 1.0f; World.m[2][3] = 0.0f;
World.m[3][0] = 0.0f; World.m[3][1] =0.0f; World.m[3][2] = 0.0f; World.m[3][3] = 1.0f;

在渲染函数中,我们准备了一个4*4矩阵并根据上面的解释填充它!我们设置v2和v3为0,因为我们希望物体在y、z坐标上就没有变化,我们设置v1为sin函数的结果,这样可以将X坐标的值变换到在-1到1之间波动。现在我们需要把矩阵加载到着色器中。

glUniformMatrix4fv(gWorldLocation,1, GL_TRUE, &World.m[0][0]);

这是另外一个glUniform*函数的例子,用来加载数据到一致着色器变量中。这个特定的函数可以加载4*4的矩阵,也有用于加载2x2, 3x3, 3x2, 2x4, 4x2, 3x4 和 4x3的版本。第一个参数是一致变量的位置(在着色编译器用了glGetUniformLocation()函数后恢复)。第二个参数代表我们更新的矩阵的数量。一个矩阵我们用1,但是我们也可以调用这个函数一次更新多个矩阵。第三个参数很容易迷惑新手。它表明提供矩阵是按行优先还是列优先的顺序! 关键在于C/C++语言默认就是行优先的!这意味着当你给二维数组填充数值时,它们在内存中一行一行的排列,并且最上面的一行在低地址处!例如,看下面的数组:

int a[2][3];
a[0][0]= 1;
a[0][1]= 2;
a[0][2]= 3;
a[1][0]= 4;
a[1][1]= 5;
a[1][2]= 6;

视觉上这个数组看起来像下面的矩阵:

1 2 3
4 5 6

而在内存中的排列是这样的:1 2 3 45 6(1在最低地址)

所以我们设定函数glUniformMatrix4fv()第三个参数是GL_TRUE是因为我们以行优先的方式提供矩阵的。我们也可以将第三个参数为GL_FALSE,但是这样的话我们需要转置矩阵的值,因为C/C++中内存的排列仍然是行优先,但是OpenGL将认为我们提供的前四个值实际上是一个矩阵的列,并做相应处理。第四个参数是矩阵在内存的开始地址!

其余的代码是着色器的编码。

Uniform  mat4  gWorld;

这是一个4*4矩阵一致变量。也有mat2 和mat3。

gl_Position= gWorld * vec4(Position, 1.0);

我们添加到顶点缓冲区中的三角形顶点的位置是三元向量,但是之前我们知道对于一个点,其W分量应该为1。所以这里有两种选择:将四元顶点放入顶点缓冲区中,或者在顶点着色器中增加第四部分。第一个选择没有优势,因为每个顶点位置需要消耗额外的四位内存,而因为我们知道那部分的内容一直是1。较之而言,在VBO中维持三个分量的点,之后再着色器中为其添加第四个分量的方法就高效很多。在GLSL中通过使用'vec4(Position, 1.0)'完成这个扩充。我们将这个位置向量与顶点相乘,最后将其结果传入gl_Position中。总之本例中,每一帧我们生成一个变换矩阵使得所有沿着X轴平移,并且这个平移的距离在[-1,1]之间波动。着色器将每个顶点的位置与此矩阵相乘,结果使物体左右移动。在大多数情况下,在顶点着色器完成处理后,三角形的一边会超出规范化盒子,这时候裁剪器将把超出的那边剪掉。这样我们就只能看到在规范化盒子里面的部分。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
总目录   第一章 OpenGL三维图形世界     1.1 OpenGL使人们进入三维图形世界     1.2 OpenGL提供直观的三维图形开发环境     1.3 OpenGL称为目前三维图形开发标准   第二章 OpenGL概念建立     2.1 OpenGL基本理解     2.2 OpenGL工作流程     2.3 OpenGL图形操作步骤   第三章 Windows NT环境下的OpenGL     3.1 Windows NT下的OpenGL函数     3.2 OpenGL基本功能     3.3 Windows NT下OpenGL结构   第四章 OpenGL基本程序结构   第五章 OpenGL数据类型和函数名   第六章 OpenGL辅助库的基本使用     6.1 辅助库函数分类     6.2 辅助库应用示例   第七章 OpenGL建模     7.1 描述图元      7.1.1 齐次坐标      7.1.2 点      7.1.3 线      7.1.4 多边形     7.2 绘制图元      7.2.1 定义顶点      7.2.2 构造几何图元   第八章 OpenGL变换     8.1 从三维空间到二维平面      8.1.1 相机模拟      8.1.2 三维图形显示流程      8.1.3 基本变换简单分析     8.2 几何变换      8.2.1 两个矩阵函数解释      8.2.2 平移      8.2.3 旋转      8.2.4 缩放和反射      8.2.5 几何变换举例     8.3 投影变换      8.3.1 正射投影      8.3.2 透视投影     8.4 裁剪变换     8.5 视口变换     8.6 堆栈操作   第九章 OpenGL颜色     9.1 计算机颜色      9.1.1 颜色生成原理      9.1.2 RGB色立体     9.2 颜色模式      9.2.1 RGBA模式      9.2.2 颜色表模式      9.2.3 两种模式应用场合     9.3 颜色应用举例   第十章 OpenGL光照     10.1 真实感图形基本概念     10.2 光照模型      10.2.1 简单光照模型      10.2.2 OpenGL光组成      10.2.3 创建光源      10.2.4 启动光照     10.3 明暗处理     10.4 材质      10.4.1 材质颜色      10.4.2 材质定义      10.4.3 材质RGB值和光源RGB值的关系      10.4.4 材质改变   第十一章 OpenGL位图和图像     11.1 位图      11.1.1 位图和字符      11.1.2 当前光栅位置      11.1.3 位图显示     11.2 图像      11.2.1 象素读写      11.2.2 象素拷贝      11.2.3 图像缩放      11.2.4 图像例程   第十二章 OpenGL纹理     12.1 基本步骤     12.2 纹理定义     12.3 纹理控制      12.3.1 滤波      12.3.2 重复与约简     12.4 映射方式     12.5 纹理坐标       12.5.1 坐标定义       12.5.2 坐标自动产生   第十三章 OpenGL复杂物体建模     13.1 图元扩展      13.1.1 点和线      13.1.2 多边形     13.2 法向计算      13.2.1 法向基本计算方法      13.2.2 法向定义     13.3 曲线生成      13.3.1 曲线绘制举例      13.3.2 曲线定义和启动      13.3.3 曲线坐标计算      13.3.4 定义均匀间隔曲线坐标值     13.4 曲面构造      13.4.1 曲面定义和坐标计算      13.4.2 定义均匀间隔的曲面坐标值      13.4.3 纹理曲面      13.4.4 NURBS曲面   第十四章 OpenGL特殊光处理     14.1 光照模型      14.1.1 全局环境光      14.1.2 近视点与无穷远视点      14.1.3 双面光照     14.2 光源位置与衰减     14.3 聚光与多光源      14.3.1 聚光      14.3.2 多光源与例程     14.4 光源位置与方向的控制     14.5 辐射光   第十五章 OpenGL效果处理     15.1 融合      15.1.1 Alpha值与融合      15.1.2 融合因子      15.1.3 融合实例     15.2 反走样      15.2.1 行为控制函数      15.2.2 点和线的反走样      15.2.3 多边形的反走样     15.3 雾      15.3.1 雾的概论和例程      15.3.2 雾化步骤   第十六章 OpenGL显示列表     16.1 显示列表概论      16.1.1 显示列表的优势      16.1.2 显示列表的适用场合     16.2 创建和执行显示列表      16.2.1 创建显示列表      16.2.2 执行显示列表     16.3 管理显示列表      16.4 多级显示列表   第十七章 OpenGL帧缓存和动画     17.1 帧缓存      17.1.1 帧缓存组成      17.1.2 缓存清除     17.2 动画
本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍。   章 名主 要 内 容   第1章 英雄还看今朝—Android简介本章介绍了市场上主流的手机平台,同时也分析了未来手机平台的发展趋势及Android平台的前景   第2章 数风流人物—当前流行游戏类型简介本章以分类的方式简要地介绍了当前流行的游戏的玩法,游戏的视觉效果,游戏的设计及《仙剑》等著名游戏的历史   第3章 不积跬步,无以至千里—游戏开发基础知识本章初步介绍了游戏开发的基础知识   第4章 千里之行,始于足下—3D开发基础知识本章介绍了3D开发中的基础知识,包括OpenGL ES的介绍及OpenGL ES中绘制模型的原理,并通过点、线和三角形的绘制介绍了OpenGL ES中模型的几种绘制方式。最后介绍了3D场景中常用的两种投影方式,并通过例子比较了这两种投影的区别   第5章 愿君多采撷,此物最相思—光照效果的开发本章介绍了光照的基础知识,包括环境光、散射光及镜面光   第6章 为伊消得人憔悴——纹理映射本章主要介绍了纹理的基础知识,以及纹理的不同拉伸方式和纹理过滤高级技术,从绘制三角形开始到绘制地月系,可能会经历很长时间,但是这对以后的学习是有帮助的   第7章 海阔凭鱼跃,天高任鸟飞—3D基本形状的构建在本章中介绍了圆柱体、圆锥体、圆环、抛物面、双曲面和螺旋面在OpenGL ES中的渲染方法。这些基本形状在3D世界中应用广泛,在构造一些复杂物体时,经常会运用这些基本形状来进行拼装组合   第8章 执子之手,与子偕老—坐标变换本章介绍了坐标变换的应用。绘制3D场景的过程,主要是旋转和平移操作的组合,通过合理的堆栈操作,就比较容易绘制出所需的3D场景   第9章 孤帆远影碧空尽—摄像机与雾特效在本章中,首先对摄像机及其配置做了介绍。摄像机在3D编程中至关重要,没有正确的配置,摄像机可能不能获得想要的场景效果。然后对雾特效做了具体介绍,应用雾特效可以使场景更加逼真,并且可以减少场景渲染量来提高性能   第10章 假作真时真亦假—混合本章主要为读者介绍了混合,从混合的背景知识到如何配置源因子和目标因子。在介绍源因子和目标因子的时候,向读者介绍了一些预定义常量和一些常用的组合方式,以及如何启用混合   第11章 蓦然回首,那人却在灯火阑珊处—3D高级技术本章主要为读者介绍了3D的一部分高级技术。每一项技术通过讲解其原理和案例,使读者对3D高级技术有一定的了解   第12章 心有灵犀一点通—传感器在本章中,向读者介绍了Android中传感器的相关知识。包括传感器的种类、配置,并且着重介绍了姿态传感器的应用   第13章 千锤万凿出深山—游戏中的数学与物理在本章中对3D游戏中可能会用到的数学及物理知识进行了简单的介绍,这在3D游戏开发中是相当重要的。游戏中的核心算法,基本上都要用到数学和物理知识。一款游戏的性能很大程度上取决于游戏设计的算法   第14章 山舞银蛇,原驰蜡象—AI基本理念本章主要介绍了AI、AI引擎的基本组成与设计,以及游戏AI中图的搜索和模糊逻辑,其中游戏AI中图的搜索为本章的重点。在本章中详细介绍了5种算法的原理与实现   第15章 独上高楼,望尽天涯路—开发小秘籍本章介绍了地图设计器、多键技术、虚拟键盘、查找表技术、状态机、AABB边界框、穿透效应、拾取技术,以及天空盒和天空穹在OpenGL ES中的应用 第二篇以7个比较大的案例来说明Android平台下3D游戏的开发流程,通过这7个案例的讲解,读者对3D游戏的开发将会有更深层次的理解。   章 名主 要 内 容   第16章 体育类游戏——《疯狂投篮》本章介绍了Android 3D游戏《疯狂投篮》的开发。通过该案例向读者介绍了在Android平台下进行3D游戏开发的相关知识和基本流程,并对游戏开发中的编程技巧进行了介绍,并主要介绍了篮球与地面、墙面及篮框的碰撞检测及运动动画的实现方法   第17章 益智类游戏——《旋转积木》本章介绍了Android 3D游戏《旋转积木》的开发。主要介绍了积木旋转的不同状态的实现方法和地图设计器的应用   第18章 休闲类游戏——《摩天大楼》本章介绍了Android 3D游戏《摩天大楼》的开发。主要介绍了楼层与楼层之间的衔接与碰撞及掉落后翻转动画的实现   第19章 动作类游戏——《3D空战》本章介绍了Android 3D游戏《3D空战》的开发。主要介绍了飞机的构造方法和我方战机与敌方战机的操控及动画实现   第20章 桌面类游戏——《激情台球》本章介绍了Android 3D游戏《激情台球》的开发。主要介绍了台球与台球的碰撞检测实现、台球与球桌的碰撞检测实现和进球的判定实现   第21章 射击类游戏——《抢滩登陆》本章介绍了Android 3D游戏《抢滩登陆》的开发。主要运用了灰度图生成技术并且主要介绍了坦克运动的实现方法及炮弹碰撞检测的实现   第22章 竞技类游戏——《乡村飙车》本章介绍了Android 3D游戏《乡村飙车》的开发。主要介绍了运用分层绘制和拼接绘制的策略进行场景的优化绘制,并且对场景部件进行了分类控制   本书面向的读者   本书的内容详细,且几乎涵盖了Android 3D游戏开发所有相关的技术,并向读者介绍了真实项目的开发流程,主要面向以下读者。   Android的初学者   本书详细介绍了OpenGL ES的基础知识,并对Android 3D游戏程序的开发进行了介绍。作为一名Android的初学者,通过本书的学习可以快速全面地掌握Android 3D游戏开发的相关知识,稳健地步入Android 3D游戏开发人员的行列。   有一定Android基础且希望学习Android 3D游戏开发的读者   有一定Android基础的读者通过阅读本书的前半部分便可快速掌握OpenGL ES的基础知识,然后通过7个真实案例的学习迅速掌握Android平台下应用程序的开发。   在职的开发人员
  总目录   第一章 OpenGL三维图形世界     1.1 OpenGL使人们进入三维图形世界     1.2 OpenGL提供直观的三维图形开发环境     1.3 OpenGL称为目前三维图形开发标准   第二章 OpenGL概念建立     2.1 OpenGL基本理解     2.2 OpenGL工作流程     2.3 OpenGL图形操作步骤   第三章 Windows NT环境下的OpenGL     3.1 Windows NT下的OpenGL函数     3.2 OpenGL基本功能     3.3 Windows NT下OpenGL结构   第四章 OpenGL基本程序结构   第五章 OpenGL数据类型和函数名   第六章 OpenGL辅助库的基本使用     6.1 辅助库函数分类     6.2 辅助库应用示例   第七章 OpenGL建模     7.1 描述图元      7.1.1 齐次坐标      7.1.2 点      7.1.3 线      7.1.4 多边形     7.2 绘制图元      7.2.1 定义顶点      7.2.2 构造几何图元   第八章 OpenGL变换     8.1 从三维空间到二维平面      8.1.1 相机模拟      8.1.2 三维图形显示流程      8.1.3 基本变换简单分析     8.2 几何变换      8.2.1 两个矩阵函数解释      8.2.2 平移      8.2.3 旋转      8.2.4 缩放和反射      8.2.5 几何变换举例     8.3 投影变换      8.3.1 正射投影      8.3.2 透视投影     8.4 裁剪变换     8.5 视口变换     8.6 堆栈操作   第九章 OpenGL颜色     9.1 计算机颜色      9.1.1 颜色生成原理      9.1.2 RGB色立体     9.2 颜色模式      9.2.1 RGBA模式      9.2.2 颜色表模式      9.2.3 两种模式应用场合     9.3 颜色应用举例   第十章 OpenGL光照     10.1 真实感图形基本概念     10.2 光照模型      10.2.1 简单光照模型      10.2.2 OpenGL光组成      10.2.3 创建光源      10.2.4 启动光照     10.3 明暗处理     10.4 材质      10.4.1 材质颜色      10.4.2 材质定义      10.4.3 材质RGB值和光源RGB值的关系      10.4.4 材质改变   第十一章 OpenGL位图和图像     11.1 位图      11.1.1 位图和字符      11.1.2 当前光栅位置      11.1.3 位图显示     11.2 图像      11.2.1 象素读写      11.2.2 象素拷贝      11.2.3 图像缩放      11.2.4 图像例程   第十二章 OpenGL纹理     12.1 基本步骤     12.2 纹理定义     12.3 纹理控制      12.3.1 滤波      12.3.2 重复与约简     12.4 映射方式     12.5 纹理坐标       12.5.1 坐标定义       12.5.2 坐标自动产生   第十三章 OpenGL复杂物体建模     13.1 图元扩展      13.1.1 点和线      13.1.2 多边形     13.2 法向计算      13.2.1 法向基本计算方法      13.2.2 法向定义     13.3 曲线生成      13.3.1 曲线绘制举例      13.3.2 曲线定义和启动      13.3.3 曲线坐标计算      13.3.4 定义均匀间隔曲线坐标值     13.4 曲面构造      13.4.1 曲面定义和坐标计算      13.4.2 定义均匀间隔的曲面坐标值      13.4.3 纹理曲面      13.4.4 NURBS曲面   第十四章 OpenGL特殊光处理     14.1 光照模型      14.1.1 全局环境光      14.1.2 近视点与无穷远视点      14.1.3 双面光照     14.2 光源位置与衰减     14.3 聚光与多光源      14.3.1 聚光      14.3.2 多光源与例程     14.4 光源位置与方向的控制     14.5 辐射光   第十五章 OpenGL效果处理     15.1 融合      15.1.1 Alpha值与融合      15.1.2 融合因子      15.1.3 融合实例     15.2 反走样      15.2.1 行为控制函数      15.2.2 点和线的反走样      15.2.3 多边形的反走样     15.3 雾      15.3.1 雾的概论和例程      15.3.2 雾化步骤   第十六章 OpenGL显示列表     16.1 显示列表概论      16.1.1 显示列表的优势      16.1.2 显示列表的适用场合     16.2 创建和执行显示列表      16.2.1 创建显示列表      16.2.2 执行显示列表     16.3 管理显示列表      16.4 多级显示列表   第十七章 OpenGL帧缓存和动画     17.1 帧缓存      17.1.1 帧缓存组成      17.1.2 缓存清除     17.2 动画
第1章 OpenGL基础知识 1.1 OpenGL概述 1.1.1 直观的三维图形开发环境 1.1.2 三维图形开发标准 1.1.3 OpenGL基本功能与操作 1.1.4 OpenGL的体系结构 1.1.5 创建OpenGL控制台应用程序框架 1.1.6 MFC环境下OpenGL单文档应用程序框架 1.2 OpenGL图形的实现方式 1.2.1 设备上下文DC与渲染上下文RC 1.2.2 OpenGL像素格式设置 1.2.3 OpenGL图形处理流程 1.2.4 OpenGL图形绘制方式 1.2.5 OpenGL程序的运行方式 1.3 OpenGL图形开发库 1.3.1 开发库的组成 1.3.2 基本数据类型 1.3.3 OpenGL库函数命名规则 1.4 基于OpenGL的高层图形库 1.4.1 IRIS Performer 1.4.2 Vega 1.4.3 VTree 1.5 OpenGL应用程序框架 第2章 OpenGL建模技术 2.1 基本图元及规则物体绘制 2.1.1 图形显示控制 2.1.2 点的绘制 2.1.3 线段的绘制 2.1.4 多边形的绘制 2.1.5 规则三维物体绘制函数 2.1.6 实例介绍 2.2 曲线与曲面绘制 2.2.1 曲线的基本理论 2.2.2 样条曲线的绘制 2.2.3 样条曲面的绘制 2.2.4 NURBS曲线和曲面绘制 2.2.5 二次曲面 2.3 显示列表 2.3.1 什么是显示列表 2.3.2 显示列表的创建 2.3.3 显示列表的执行 2.3.4 多重显示列表 2.3.5 显示列表索引 2.3.6 显示列表的嵌套 2.3.7 实例介绍 2.4 位图、图像与文本绘制 2.4.1 位图 2.4.2 图像 2.4.3 文本 第3章 坐标变换 3.1 从三维图形到二维图像 3.1.1 三维图形的输出过程 3.1.2 坐标系与坐标变换 3.1.3 矩阵操作 3.2 几何变换 3.2.1 平移变换 3.2.2 旋转变换 3.2.3 缩放变换 3.2.4 变换次序 3.2.5 实例介绍 3.3 投影变换 3.3.1 透视投影 3.3.2 正交投影 3.4 视口变换 3.4.1 定义视口 3.4.2 变换z坐标 3.5 附加裁剪面 3.6 矩阵堆栈 第4章 OpenGL颜色 4.1 计算机中的颜色 4.1.1 颜色的表示 4.1.2 RGB颜色模型概述 4.2 颜色模式与指定颜色 4.2.1 RGBA颜色模式 4.2.2 颜色索引模式 4.3 着色模式 4.3.1 着色模式 第5章 光照与材质处理 5.1 简化光照模型 5.1.1 光照模型概述 5.1.2 光照分量 5.1.3 法向量 5.2 创建光源 5.2.1 定义一个简单光源 5.2.2 启用光照和激活光源 5.2.3 光源属性 5.3 复杂光照模型 5.3.1 全局环境光 5.3.2 近似点和无穷远视点 5.3.3 双面光照 5.4 材质 5.4.1 材质的RGB值与光源的RGB值 5.4.2 材质定义 5.4.3 材质属性 5.4.4 改变材质 第6章 纹理映射技术 6.1 纹理的定义 6.1.1 一维纹理映射的定义 6.1.2 二维纹理映射的定义 6.2 纹理数据的获取 6.2.1 直接创建法 6.2.2 读取外部文件 6.3 纹理坐标 6.3.1 纹理坐标的指定 6.3.2 纹理坐标的自动计算 6.4 纹理的控制 6.4.1 缩小与放大滤波 6.4.2 纹理重复和缩限 6.5 纹理的映射方式 6.6 多重纹理 第7章 帧缓存技术与动画 7.1 OpenGL中的各种缓存 7.1.1 颜色缓存 7.1.2 深度缓存 7.1.3 模板缓存 7.1.4 累积缓存 7.2 缓存操作技术 7.2.1 清除缓存 7.2.2 选择绘图颜色缓存 7.2.3 屏蔽缓存 7.3 测试操作 7.3.1 裁剪测试 7.3.2 Alpha测试 7.3.3 模板测试 7.3.4 深度测试 7.4 双缓存动画 7.5 特殊效果的实现 7.5.1 融合 7.5.2 反走样 7.5.3 雾效 第8章 OpenGL图形交互技术 8.1 选择 8.1.1 选择模式操作步骤 8.1.2 名字堆栈 8.1.3 命中记录 8.1.4 拾取 8.2 反馈 8.2.1 反馈模式操作步骤 8.2.2 反馈数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值