opengl纹理映射(下)

合集下载

第三章光照模型纹理映射

第三章光照模型纹理映射

第三章光照模型及纹理映射基本光照模型1.在现实生活中,当光照在非透明物体上时,部分光线被物体吸收,剩余的部分光线被反射。

人眼依靠这种反射光来感知物体的形状、颜色和其他细节。

从光源投向物体的光称为入射光,从物体表面反射回的光称为反射光。

1.1光照模型概述当光照射到物体表面上时,将出现3种情况:●光从物体表面反射,形成反射光●光穿透物体,形成透射光●光被物体吸收,转化成为物体的内能在上述三种情形的光线中,通常只有前2种情形的光线会对人眼产生视觉效果,使人察觉到物体的色彩变化。

OpenGL用一种近似的光照模型模拟现实世界的光照效果。

在该模型中,仅当物体表面吸收和反射光线时,光源才会起做作用。

每一个物体表面都假定是由某种特性的材料构成的。

一种材料可能发出自己的光线,也可能在各个方向上发散一些射入的光线,还有可能像镜子一样在某个方向强烈地反射入射光。

1.2光照分量在OpenGL的简化光照模型中,将光照分为4个独立的组成部分:辐射光、环境光、漫反射光和镜面反射光。

1)辐射光辐射光是直接从物体或光源发出的,不受任何其他光源的影响。

2)环境光环境光是这样一种光线,它被环境多次反射,以致于连初始方向也难以确定。

这种光线看起来就像来自于所有的方向,当它照在一个物体表面时,它在所有的方向上等量地反射。

3)漫反射光在被照射物体表面的反射光中,那些均匀地向各个方向反射出去的光,称为漫反射光,如黑板反射就属于漫反射光4)镜面反射光镜面反射光是指超一定方向的反射光,如点光源照射光滑金属球表面时,会在球表面形成一个特别亮的区域,呈现所谓的高亮(Highlight>,这就是光源在该物体表面形成的镜面反射光(SpecularLight>。

点光源照射表面光滑的物体时,高亮区域小而亮;而点光源照射表面粗糙的物体时,高亮区域大而不亮。

1.3创建光源光源有许多特性,如颜色、位置、方向等。

不同特性的光源,作用在物体上的效果是不一样的。

opengl光栅化原理

opengl光栅化原理

opengl光栅化原理OpenGL,这个被广泛使用的图形编程接口,以其强大的功能和灵活的编程方式,在计算机图形领域占据了重要的地位。

而在OpenGL 中,光栅化(Rasterization)是一个关键步骤,它把几何形状转换成像素网格。

这篇文章将带您深入了解OpenGL中的光栅化原理。

一、引言想象一下,你正在一个巨大的画布前,手中握着一把画笔,你的任务是将那些复杂的几何形状转换成实际的像素。

这就是光栅化的过程,也是OpenGL中的核心步骤。

理解这个过程,对于我们更好地使用OpenGL,尤其是进行高效的渲染,是非常重要的。

二、基本原理1.坐标变换:首先,我们需要将几何形状的顶点从世界坐标系转换到屏幕坐标系。

这个过程通常涉及到矩阵变换,包括平移、旋转和缩放等。

2.边缘检测:在转换后的顶点上,我们需要找到相邻的像素,以确定哪些部分的形状应该被绘制出来。

这通常通过使用扫描线(scanline)方法来实现。

3.细化:通过将线段分割成更小的线段,我们可以减少绘制的复杂性。

这种方法通常涉及到使用一些算法,如Z-Buffering或扫描线算法。

4.像素填充:最后,我们将每个边缘的像素部分填充为颜色。

这通常涉及到采样颜色纹理或者使用一些插值方法来生成颜色。

三、更深入的理解1.光栅化效率和精度:在光栅化过程中,我们需要平衡效率和精度。

为了提高效率,我们可以使用一些简化的算法,如简单的扫描线算法或简单的Z-Buffering。

但是,这些算法可能会牺牲精度。

相反,更复杂的算法如PhongAntialiasing或Mipmapping可以提供更好的视觉效果,但可能会降低性能。

2.纹理映射:纹理映射是OpenGL中的一项重要功能,它允许我们在渲染时使用图像数据来替代像素的颜色。

在光栅化过程中,我们需要将纹理坐标应用到几何形状上,然后将纹理采样到对应的像素上。

这个过程涉及到很多计算和存储开销,因此我们需要使用合适的纹理过滤技术来减少这些开销。

opengl面试题

opengl面试题

opengl面试题OpenGL(Open Graphics Library)是一种跨平台的图形程序接口,被广泛应用于计算机图形学、游戏开发和虚拟现实等领域。

在面试中,对于应聘者来说,熟悉和掌握OpenGL相关知识是非常重要的。

本文将针对OpenGL面试题,从基础知识到高级概念进行详细讲解。

一、OpenGL基础知识1. 什么是OpenGL?OpenGL是一种开放的、跨平台的图形程序接口,由一系列函数库组成,用于渲染2D和3D图形。

它提供了丰富的绘图函数和状态管理函数,可以用于创建和操控渲染管线,实现图形的绘制、变换、光照等操作。

2. OpenGL的版本有哪些?它们之间有何区别?OpenGL的版本包括OpenGL 1.0、OpenGL 2.0、OpenGL 3.0、OpenGL 4.0等。

每个版本都有自己特定的功能和特性,新版本通常会引入更强大的功能和更高效的实现方式。

主要的区别在于对硬件和图形特性的支持程度上有所不同。

3. 什么是渲染管线?渲染管线是OpenGL中的一个重要概念,它描述了图形的处理过程。

渲染管线包括几个阶段,如顶点处理、光栅化、片段处理等。

每个阶段都有特定的功能和输入输出。

熟悉渲染管线的工作原理是理解OpenGL的关键。

4. 什么是顶点缓冲对象(VBO)?顶点缓冲对象是OpenGL中用于存储顶点数据的缓冲区。

通过创建和绑定VBO,可以将顶点数据传输到显存中,从而提高渲染效率。

VBO可以存储顶点的位置、颜色、纹理坐标等信息。

二、OpenGL高级概念1. 什么是着色器(Shader)?着色器是OpenGL中用于控制图形渲染过程的程序。

着色器分为顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)。

顶点着色器用于处理顶点相关计算,如位置变换、法线变换等;片段着色器用于处理每个像素的光照、纹理采样等操作。

2. 什么是纹理(Texture)?纹理是二维图像的映射,可以应用到模型的表面上。

纹理映射技术

纹理映射技术

2. 如何映射
• 利用纹理坐标来定义从图片到几何的映射:
– 要将该纹理映射到一个三角形上, 需设置三角形的 三个顶点在图像空间上的纹理坐标[tx ty], 再对应计 算每个几何像素在纹理图像上的对应RGB颜色;
– 一般一个四边形的纹理坐标: (0,0)(0,1)(1,0)(1,1)
– 3D Game Studio.
3. 纹理插值
• 我们只指定了三角形顶点处的纹理坐标,中间每个象素 的纹理坐标(ti, tj)可用线性插值;
• 一般双线性插值;
• 从而三角形上每个象素点都可对应地到纹理图片上去 取颜色.
思考?
• 图像与几何体的尺寸不一致怎么办?
• 几何对应的纹理空间超出[0,1)纹理空间怎么办? • 几何物体本身有颜色怎么办?
(1,1)
t1
v1
y
t2 t0
(0,0)
x
Texture Space
v0
v2
Triangle (in any space)
纹理空间与模型空间的对应
基本实现步骤:
• Three steps
-Specify texture
• Read or generate image • Assign to texture • Enable texturing
Texture Space
(1,1) (0,0)
Mirroring
常用对应函数
• wrap or tile: 纹理图像在表面重复。例子:地上的大理石 贴图
• mirror: 纹理图像在表面重复, 但每隔一幅进行翻转 (flipped)。这样在纹理的边界处,纹理可以保持连续。
• clamp : 把[0,1)范围之外的进行截断。截断到[0,1)内的半 个纹素。

02-配合视频讲解纹理的基本概念和纹理映射的基本方法。

02-配合视频讲解纹理的基本概念和纹理映射的基本方法。

让人头疼的纹理(上):颜色纹理华中科技大学软件学院万琳提纲1纹理的概念2纹理的定义和映射3基于OpenGL的颜色纹理1纹理的概念用简单光照明模型生成真实感图象,由于表面过于光滑单调,反而显得不真实。

现实物体表面有各种表面细节,这些细节就叫纹理。

1纹理的概念用简单光照明模型生成真实感图象,由于表面过于光滑单调,反而显得不真实。

现实物体表面有各种表面细节,这些细节就叫纹理。

1纹理的概念用简单光照明模型生成真实感图象,由于表面过于光滑单调,反而显得不真实。

现实物体表面有各种表面细节,这些细节就叫纹理。

1纹理的概念纹理实例:纹理的概念1纹理:体现物体表面的细节纹理类型:◆颜色纹理物体表面(平面或者曲面)花纹、图案◆几何纹理基于物体表面的微观几何形状二维纹理几何纹理2纹理的定义和映射◆生成纹理的一般方法,是预先定义纹理模式,然后建立物体表面的点与纹理模式的点之间的对应。

◆当物体表面的可见点确定之后,以纹理模式的对应点参与光照模型进行计算,就可把纹理模式附到物体表面上。

这种方法称为纹理映射(Texture Mapping)。

像素区物体表面纹理模式2纹理的定义和映射纹理模式定义:•图象纹理:将二维纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应的纹理图案中相应点的颜色值。

•函数纹理:用数学函数定义简单的二维纹理图案,如方格地毯。

或用数学函数定义随机高度场,生成表面粗糙纹理即几何纹理。

函数纹理定义的方格地毯图像纹理2纹理的定义和映射纹理映射:•建立纹理与三维物体之间的对应关系•扰动法向量图像纹理映射到我们课程原创的动画人物帽子上纹理的定义和映射2◆纹理模式定义方法:纹理空间纹理定义在纹理空间上的函数,纹理空间通常是一个单位正方形区域0≤u ≤ 1,0≤ v ≤1之上。

纹理映射中最常见的纹理•一个二维纹理的函数表示•纹理图象V(0,1)(0,0)(1,0) U⎣⎦⎣⎦⎣⎦⎣⎦⎩⎨⎧⨯+⨯⨯+⨯=evenv u odd v u v u g 881880),(纹理的定义和映射2◆纹理映射方法:建立物体空间表面和纹理空间之间的对应关系根据物体空间的表面坐标(x,y,z)计算其纹理空间坐标(u,v)值:对物体表面坐标(x,y,z)用u 、v 进行参数化(第一步),然后反求出参数u 、v 用物体表面坐标(x,y,z)的表达(第二步);根据纹理空间定义的纹理(u,v)得到该处的纹理值,并用此值取代光照明模型中的相应项,实现纹理映射(第三步)。

基于OpenGL的纹理映射的实现与应用

基于OpenGL的纹理映射的实现与应用
21纹理 的定义 .
在 最简单情 况下 , 纹理 是单个 图像 ; 在通常情 况下 , 纹理 是二维 的,即纹 理数据是 一个矩 形数组 . O eGL 在 pn
中定义二维纹理使用的函数是gTxm g2 0其函数原型可参考相关书籍, leI aeD , 在我们的应用实例( 柳编工艺品的三 维真实感模拟 I) 也可以采用别的方法实现纹理的定义. 2 中,
模 拟 中的应 用.
关键 词 :O eGL p n ;纹 理 映射 ;柳 编 工 艺品 :真 实 感 图形
中图分类号 : P 0 . T 31 6
文献标识码 :A
1 引言
在利用计算机对现实物体进行真实感绘制 时, ¨ 如果加入了光照, 物体将会具有立体感, 如果又给出了物
体表面的材质 、 颜色等, 物体将会变得丰富多彩并且还会具有一定的质感, 从而使绘制出的图形具有了一定的真 实感. 但在有些情况下, 仅仅使用材质属性等是不能获得更为真实的图形的, 这时就需要使用纹理映射技术来 绘制物体表面的每一个三维细节.
23 纹理的 映射方式 _
在一般情况下, 纹 图像是直接作为颜色画到多边形上的. 实际上, pn L 还可以用纹理 中的值来 在O eG 中, 调整多边形甚至曲面原本的颜色, 或者用纹理图像中的颜色与多边形甚至曲面原本的颜色进行融合, 这就是纹 理 的映射方 式 . O eGL 在 pn @控 制纹理 映射方 式 的函数是 g eE v (共有 三种模式 :()L M OD U LATE, 纹 l x n ) T , 1G 理图像 以透明方式贴在物体表面上 ; 2G L N , () L B E D 使用一个R B 常量来融合物体原色和纹理图像的颜色; G A () L D C ,即贴纸 纹理 映射方式 . 3G E AL

C语言实现OpenGL渲染

C语言实现OpenGL渲染

C语言实现OpenGL渲染OpenGL是一种强大的图形渲染API(应用程序接口),它可用于创建高性能的2D和3D图形应用程序。

在本文中,我们将探讨如何使用C语言实现OpenGL渲染。

1. 初始化OpenGL环境在开始之前,我们需要初始化OpenGL环境。

这可以通过以下步骤完成:1.1. 创建窗口使用C语言中的窗口创建库(如GLUT或GLFW)创建一个可见的窗口。

这个窗口将充当我们OpenGL渲染的目标。

1.2. 设置视口使用glViewport函数将窗口的尺寸设置为需要进行渲染的大小。

视口定义了OpenGL将渲染的区域。

1.3. 创建正交投影或透视投影矩阵使用glOrtho或gluPerspective函数创建透视或正交投影矩阵。

投影矩阵将定义OpenGL渲染的视图。

2. 渲染基本图形一旦我们初始化了OpenGL环境,我们可以开始渲染基本图形。

以下是一些常见的基本图形渲染函数:2.1. 绘制点使用glBegin和glEnd函数,以及glVertex函数,可以绘制一个或多个点。

2.2. 绘制线段使用glBegin和glEnd函数,以及glVertex函数,可以绘制一条或多条线段。

2.3. 绘制三角形使用glBegin和glEnd函数,以及glVertex函数,可以绘制一个或多个三角形。

2.4. 绘制多边形使用glBegin和glEnd函数,以及glVertex函数,可以绘制一个或多个多边形。

3. 设置光照效果为了给渲染的图形添加逼真感,可以设置光照效果。

以下是一些常见的光照函数:3.1. 设置光源使用glLight函数,可以设置光源的位置、光照颜色等参数。

3.2. 设置材质属性使用glMaterial函数,可以设置渲染对象的表面材质属性,如漫反射、镜面反射等。

3.3. 使用光照模型使用glShadeModel函数,可以选择光照模型,如平滑光照模型或平面光照模型。

4. 纹理映射纹理映射能够使渲染的图形更逼真。

opengl算法学习---纹理映射

opengl算法学习---纹理映射

opengl算法学习---纹理映射纹理映射纹理映射(Texture Mapping),⼜称纹理贴图,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。

简单来说,就是把⼀幅图像贴到三维物体的表⾯上来增强真实感,可以和光照计算、图像混合等技术结合起来形成许多⾮常漂亮的效果。

纹理纹理可看成是⼀个或多个变量的函数,因此根据纹理定义域的不同,纹理可分为⼀维纹理、⼆维纹理、三维纹理和⾼维纹理。

基于纹理的表现形式,纹理⼜可分为颜⾊纹理、⼏何纹理两⼤类。

颜⾊纹理指的是呈现在物体表⾯上的各种花纹、图案和⽂字等,即通过颜⾊⾊彩或明暗度的变化体现出来的细节。

如⼤理⽯墙⾯、墙上贴的字画器⽫上的图案等。

⼏何纹理(也可称为凹凸纹理)是指基于景物表⾯微观⼏何形状的表⾯纹理,如桔⼦、树⼲、岩⽯、⼭脉等表⾯呈现的凸凹不平的纹理细节。

⽣成颜⾊纹理的⼀般⽅法是在⼀个平⾯区域(即纹理空间)上预先定义纹理图案,然后建⽴物体表⾯的点与纹理空间的点之间的对应—即映射。

以纹理空间的对应点的值乘以亮度值,就可把纹理图案附到物体表⾯上⽤类似的⽅法给物体表⾯产⽣凹凸不平的外观或称凹凸纹理。

普通纹理映射常见的2D纹理映射实际上是从纹理平⾯到三维物体表⾯的⼀个映射。

凹凸纹理映射前述各种纹理映射技术只能在光滑表⾯上描述各种事先定义的花纹图案,但不能表现由于表⾯的微观⼏何形状凹凸不平⽽呈现出来的粗糙质感,如布纹,植物和⽔果的表⽪等1978年Blinn提出了⼀种⽆需修改表⾯⼏何模型,即能模拟表⾯凹凸不平效果的有效⽅法⼀⼏何(凹凸)纹理映射(bump mapping)技术⼀个好的扰动⽅法应使得扰动后的法向量与表⾯的⼏何变换⽆关,不论表⾯如何运动或观察者从哪⼀⽅向观察表⾯,扰动后的表⾯法向量保持不变。

Blinn表⾯法⽮扰动法在表⾯任⼀点处沿其法向附加⼀微⼩增量,从⽽⽣成⼀张新的表⾯,计算新⽣成表⾯的法⽮量以取代原表⾯上相应点的法⽮量。

透明效果与混合光学原理:透射,折射,反射颜⾊调和法设a为透明体的不透明度,0≤a≤1,则I=αI a+(1−α)I ba=1,完全不透明a=0,完全透明alpha融合技术BlendingRGBA(a)不透明度a表⽰穿透该表⾯光线的数量a=1,完全不透明;a=0,完全透明gl.blendFunc(src_ factor,dst factor)混合后颜⾊=源颜⾊src_factor+⽬标颜⾊dst_factor源颜⾊:当前对象⽬标颜⾊:帧缓存像素透明与Z-Buffer消隐当对象A是透明的,即B透过A是部分可见时先画B再画A,可以处理先画A再画B,深度缓冲会从B取⼀个像素,同时注意到⼰经绘制了⼀个更近的像素(A),然后它的选择是不绘制BZ-Buffer消隐不能很好处理透明的物体,需要修正才⾏开启深度测试gl.enable(gl.DEPTH_TEST);绘制所有不透明物体(a=1.0)锁定深度缓冲区gl.depthMask(false);按从后向前次序绘制所有半透明物体释放深度缓冲区gl.depthMask(true);光线跟踪光线跟踪算法[WH1T80]是⽣成⾼度真实感图形的主要算法之⼀。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

齐次坐标
齐次坐标(homogeneous coordinates)
是对普通坐标的扩展 二维平面点(x,y)的齐次坐标表示为(x, y,w)
(x,y,w)→(x/w,y/w)
三维空间点(x,y,z)的齐次坐标表示为 (x,y,z,w)
(x,y,z,w)→(x/w,y/w,z/w)
齐次坐标
两个重要性质
驻留纹理
驻留策略
为纹理对象指定驻留优先级
void glPrioritizeTextures(GLsizei n, const GLuint *textureNames, const GLclampf *priorities) 优先级范围在[0.0,1.0]之间,0最低,1最高
为当前绑定纹理指定优先级
GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR
mipmap下的过滤处理
GL_NEAREST_MIPMAP_NEAREST
寻找最合适的一层mipmap,再应用GL_NEAREST规则寻找合适 的纹元
OpenGL三维图形编程
纹理映射(下)
纹理高级技术
一维纹理 纹理代理 驻留纹理 自动纹理坐标 环境映射 纹理矩阵 齐次坐标 细节多层次(mipmap)
一维纹理
与二维纹理相关函数类似,target参数使用 GL_TEXTURE_1D
从内存纹理数据定义纹理 从帧缓存数据创建纹理 使用内存数据替换纹理图像 使用帧缓存数据替换纹理图像 ……
查询多个纹理的驻留情况
GLboolean glAreTexturesResident(GLsizei n, const GLuint*textureNames, GLboolean *residences) 纹理全部驻留,返回GL_TRUE,residences不变 纹理部分驻留,返回GL_FALSE,residences相应改变
驻留纹理
OpenGL为应用程序建立起了高性能的纹 理工作集,称为“驻留(resident)”
实际上就是:保持纹理对象及其数据在显存 中,而不是在内存中
驻留纹理
显存有限,因此并不是所有纹理都可以驻留
查询单个纹理的驻留情况
首先绑定该纹理(激活),然后以参数 GL_TEXTURE_RESIDENT调用函数glGetTexParameter*v()查 询
GL_LINEAR_MIPMAP_NEAREST
寻找最合适的一层mipmap,再应用GL_LINEAR规则进行加权 平均
GL_NEAREST_MIPMAP_LINEAR
寻找两层对应的mipmap,在每一层中应用GL_NEAREST规则寻 找合适的纹元,再对所得的两个值进行加权平均

GL_LINEAR_MIPMAP_LINEAR
对于非0的缩放因子k,齐次坐标表示同一点
(x,y,z,w)=k(x,y,z,w)
当w为0时,齐次坐标表示无穷远点
(x,y,z,w)→(x/w,y/w,z/w)
细节多层次(mipmap)
回顾纹理过滤
纹理图单元(纹元,texel)和屏幕像素单元 大小往往不是一对一的匹配
细节多层次(mipmap)
mipmap实际上就是预过滤,预先生成一批 由大到小的纹理图,根据物体所占像素的 大小,选择对应的纹理进行映射 又称为LoD(Level of Detail)技术
以GL_TEXTURE_PRIORITY为参数调用glTexParameter*()
OpenGL对相同优先级的纹理对象采用“最近最少使用 (LRU)”策略
驻留纹理
有效使用驻留纹理的一个方法
分析场景,估计场景要使用的纹理的大小; 使用glCopyTexImage2D函数创建若干“空”纹 理对象,直到显存全部被占满 ( glAreTexturesResident返回GL_FALSE) 往内存中调入纹理数据,同时,采用自己的 纹理调度策略,将硬盘中的纹理文件读入内 存。譬如,单独开启一条线程实时监测 采用glTexSubImage2D方法替换纹理内容
void glTexGen{ifd}(GLenum coord, GLenum pname, TYPE param)
coord -指定哪一个纹理坐标需要自动生成,GL_S, GL_T, GL_R, 或 GL_Q pname - 必须为GL_TEXTURE_GEN_MODE param - 为GL_OBJECT_LINEAR 或 GL_EYE_LINEAR,纹理坐标的生成方式
细节多层次(mipmap)
使用mipmap的几个要点
由大到小所有的纹理,其宽、高必须都满足2的幂次 从最大尺寸到最小尺寸(1×1)的所有纹理都必须给 出,不得遗漏,每一层次的宽高都相差2倍 各个尺寸的纹理都可以单独指定,相互之间可以完全 不相关 mipmap如何与物体关联,由OpenGL负责
细节多层次(mipmap)
三维投影空间中平面的坐标表示
π(a,b,c,d)
三维投影空间中点的坐标表示
X(x,y,z,w)
点到平面的距离
d=π•X=ax+by+cz+dw 当点X在平面π上时 ,d=0,即π•X=0
自动纹理坐标
物体上各点X到平面π的距离
如果平面π是相对于物体定义的,即π定义 在物体的坐标系中,那么,物体移动时,π 也移动,物体上各点相对于π的距离不变 如果平面π是相对于人眼定义的,即π定义 在人眼坐标系中,那么物体移动而人眼不动 时,π不动,物体上各点相对于π的距离发 生改变
纹理代理
程序示例
texprox\Debug\texprox.exe 查询内部格式是否为GL_RGBA8
glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA8, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glGetTexLevelParameteriv(GL_PROXY_TEXTUR E_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format);
自动纹理坐标
参考平面π的指定
void glTexGen{ifd}v(GLenum coord, GLenum pname, TYPE *param)
coord - 指定哪一个纹理坐标需要自动生成, GL_S, GL_T, GL_R, 或 GL_Q pname - 为GL_OBJECT_PLANE 或 GL_EYE_PLANE param - 定义π的四元数组(a,b,c,d)
坐标变换的常见方式:平移,旋转,缩放 每一种操作对应一个矩阵变换
纹理矩阵
空间坐标可以通过一系列操作来改变
glMatrixMode(GL_MODELVIEW); glRotated(...);
纹理坐标也可以通过相同的操作来改变
glMatrixMode(GL_TEXTURE); glRotated(...);
寻找两层对应的mipmap,在每一层中应用GL_LINEAR规则进 行加权平均,再对所得的两个值进行加权平均
mipmap下的过滤处理
GL_NEAREST,点采样 GL_LINEAR,双线性采样 GL_LINEAR_MIPMAP_LINEAR,三线性 采样
实际应用中的LoD
LoD最重要的是思想
实际应用时,常常采用自己实现的LoD技 术,而不使用OpenGL所缺省支持的
纹理代理
纹理的约束较多
宽高有限制、内部格式多变……
纹理代理
一种查询机制,精确的确定当前OpenGL是否 支持某种指定的纹理
纹理代理
复用glTexImage2D()函数
void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
驻留纹理
上述方法的效率体现在
将费时操作全部安排在初始化时进行,主要 是创建所有纹理对象 尽量使用高效的函数
glCopyTexImage2D比glTexImage2D效率高 glTexSubImage2D比重新创建纹理对象效率高
用户自定义的驻留机制一般要比OpenGL缺省 的有效
自动纹理坐标
预备知识
参数意义与glTexImage2D完全相同 如果width, height不是2的幂次,则 gluBuild2DMipmaps负责缩放
细节多层次(mipmap)
高级mipmap
OpenGL1.2及后续版本引进了若干其它 mipmap特性 课程内不予讨论,可参见相关文档,最权威 的是OpenGL specification
mipmap下的过滤处理
纹理放大(GL_TEXTURE_MAG_FILTER)
仅仅使用level为0的纹理
mipmap下的过滤处理
纹理缩小( GL_TEXTURE_MIN_FILTER )
指定过滤方式为GL_NEAREST或GL_LINEAR时,也 仅仅使用level为0的纹理 另有四种过滤方式,在mipmap层次中寻找合适的纹 元
实际应用中的LoD
一个自定义LoD的例子
定义各级纹理 管理内存,实施调度算法 各级不同层次的纹理之间的拼接
target - 设置为GL_PROXY_TEXTURE_2D pixels - 设置为NULL 其余参数设置为将要创建的纹理的相应值
纹理代理
查询纹理状态
void glGetTexLevelParameter{if}v(GLenum target, GLint level, GLenum pname, TYPE *params) 如果没有足够的资源创建所需纹理,则对应 状态变量的查询结果为0
相关文档
最新文档