【D3D11游戏编程】学习笔记二十一:Cube Mapping及其应用之一:天空盒的实现

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

 

       这一节讨论有关纹理映射的进阶内容:Cube Mapping。

       1. 简介

       单从名字上,就大概可以看出点端倪了,翻译成中文为立方体映射,因此肯定跟立方体有关系。确实,Cube Mapping就是使用六张正方形的图片来进行纹理映射的。这六张图片分别对应了一个立方体中的六个面。由于这个立方体是轴对齐的,因此每个面可以用坐标系中的六个轴方向来惟一的表示:正X面,负X面,正Y面,负Y面,正Z面,负Z面。我们把对应这六个面的六张纹理图,称之为“Cube Map”。 如下就是一张从立方体展开的Cube Map:

 

       2. 纹理映射方法

       通常情况下,纹理映射是通过顶点上的纹理坐标u,v来进行的。对于一个二维纹理来说,u,v就惟一确定了texel的位置。但对于一张Cube Map,仅仅给出u,v坐标是无法确定像素位置的,因为它有六张纹理图。因此,这时我们需要一种新的映射技术,以一对一地确定纹理中对应的texel。

       实际上,在Cube Mapping中,映射是通过一个三维的向量实现的。该三维向量可以设想为以立方体的中心为起点,指向立方体外面。该向量与立方体的交点处对应的texel就是映射结果对应的texel。显然,一个三维向量与立方体有且仅有一个交点,因此这种方法可以用来实现立方体映射。

       以下是在二维平面上进行的图示:v代表映射使用的向量,正方形代表cube map,图中给出的交点处对应的texel即我们要的结果。

       下面我们从数学的角度来导出映射过程:

       第一步,给出一个3D向量[x,y,z],首先找出值最大的那一维。以[-3.2, 5.1, -8.4]为例子, 这时最大维为Z,最大维用来把cube map从六张图定位到一张图上。-8.4为负数,对应了立方体的负Z面,因此接下来我们关注的焦点将是立方体负Z面对应的那张纹理;

       第二步,把向量中另外两维分别除以最大维ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值