【D3D11游戏编程】学习笔记十四:纹理基础

       (注:【D3D11游戏编程】学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~)

       光照和材质的加入使得场景的真实感大大增加,但仅仅这些依然不足以表现出真实世界中物体表面的各种细节。毕竟,材质所能够提供的细节等级仅仅停留在顶点级别上。纹理的引入,使得在像素级别上提供细节成为可能,因而可以进一步大大提高物体的真实感。

 

       1. 纹理类型

       一般情况下,纹理可以看成是一个二维的数组(这里只讨论二维纹理,一维纹理和三维纹理暂时不讨论),数组中每个元素可以具有不同的数据类型,代表不同的意义。根据元素的类型,纹理可以分为如下几种:

          1.1 普通纹理贴图

          这种纹理的每个元素代表一个颜色值,可以是3维向量(RGB)或4维向量(RGBA),分别代表颜色值中的红、绿、蓝成分,对于32位颜色值,还有代表透明度的第4个成分。这种纹理是最常见的一种类型,通过把现成的图片贴在物体表面,来增加物体的真实度。

          1.2 法线贴图

          这种纹理的每个元素代表一个法线,即一个3维向量(位于切线空间Tangent Space:TBN),代表物体表面各处的法线值。这种纹理主要用于法线映射(Normal Mapping)技术中,通过贴图来直接修改物体表面的法线,从而模拟表面的凹凸细节。

          1.3 高度图

          这种纹理的每个元素代表一个高度值。一个常见的用途即地形渲染,地形渲染中用到的雏形是一个平面的网格,然后通过读取高度图来获取网格不同位置的高度信息(大多数情况下,对读取到的高度值,会再乘以一定的系数来满足所需的高度范围)。另一个用途是Displacement Mapping,配合曲面细分技术,可以修改物体表面的顶点位置,从而实现表面的凹凸细节。通过D3D11新增的Tessellation Stage来实现Displacement Mapping在以后会有专门的例子。

          当然,纹理的用途不仅仅这些。我们需要知道的是,提到纹理,不能仅仅认为它就是一个贴在物体表面的图片。不过,在这篇文章中,作为一个纹理的简介,我们仅仅考虑纹理最常见的一个用途,其他高级纹理技术在我们后面学到时会详细介绍。

 

       2. 纹理坐标

       对于最常见的二维纹理,纹理坐标用一个二维向量(u,v)表示。在D3D11中,以贴图的左上角为原点,u相对于贴图水平向右,v相对于贴图垂直向下。如下图所示:

       该坐标空间我们称之为纹理空间。为了让纹理坐标能够与贴图的尺寸无关,纹理坐标u和v被限制在0到1之间,左上角为(0,0),右上角为(1,0),左下角为(0,1),右下角为(1,1)。这样,我们在给顶点指定纹理坐标时,不需要考虑贴图的大小。无论是一张256*256,还是1024*1024的贴图,纹理坐标都适用。

      正如利用顶点坐标的插值来计算一个三角形内部各点的坐标一样,三角形内部的纹理坐标同样需要插值计算,计算方法与顶点一样。例如对于一个三角形的三个顶点坐标p0,p1,p2,对应的纹理坐标为q0,q1,q2。对于三角形内部一点:(x,y,z) = p0 + s(p1 - p0) + t(p2 - p0),那么相应的纹理坐标就是:(u,v) = q0 + s(q1 - q0) + t(q2 - q0)。如下图所示:

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值