同样我们从概念问题入手,添加纹理,说白了,就是给3D图形添加一层皮肤,比如给一个立方体,添加一个皮肤(板条箱的图案贴上去),使之变为一个立体的板条箱,给人体骨架添加皮肤,就变成了一个栩栩如生的3D人物了。不过,说是添加纹理,其实细细说来此纹理英文为Texture,和这个容易弄混的还有贴图(map)和材质(material)。之所以容易搞混的原因就是因为,乍看之下,他们的作用都是给3D图形的表面贴上了一层皮肤,让3D图形更加逼真。但又有区别,什么区别呢?这里希望大家多查查资料看看区别,我为了省事情,就直接让大家去其他博看看看别人的理解,http://blog.csdn.net/luozhuang/article/details/42128163 。

  好了,现在我们说完了概念上的一些小东西,该说一下具体怎么操作和能实现怎样的效果吧。倒叙一下,让大家先看看效果吧。下面是书中实例代码给出的一个板条箱上纹理的图片:

  大家和前面的可以对比一下,前面的例程中,立方体只是一个空架子,绘出来的是三角形骨架。不记得了可以翻看下前面的笔记(3)~而本次就直接把某一个位图直接贴在了立方体上面,这个位图和骨架图分别如下:

            

  

 

 

 

 

 

 

 

 

  这下大家有一点头绪了吧,把左边的平面图,一片一片的贴在立方体上,那么就形成了第一幅图的立体板条箱的效果~

  那么接下来,我们就讲解下如何实现吧。

  这里插叙下,在讲实现函数之前,要先懂Direct3D纹理的映射机制,我们要把平面图填充到立方体中,而立方体又是由若干个三角形组成的,很显然,填充立方体,就等效于填充三角形。那么关键部分就是,三角形和这平面图是如何映射的!给大家看个图,这个图是书上111页上面的图,

  首先把图像坐标规范化到[0,1]区间,然后把三角形的顶点(Vertex)添加一个新的属性(不要忘记Direct3D里面,顶点可以放除了坐标以外的包含颜色,法向量等等信息),uv坐标,这个uv坐标就代表了某一个顶点在贴图中的某一个平面位置,三角形的3个顶点都分别有一个uv,这样,世界坐标xyz,就和uv坐标有了一一对应的关系了,这样就形成了映射。

  基本部分完了,其他部分像什么生成顶点(Vertex)啦,产生索引(Index)啦,忘记的话,记得翻笔记(3)的代码熟悉一下。我们就讲下核心的部分,核心的部分自然是把板条箱的平面图贴在立方体上,形成纹理。这里需要用到的函数有 D3DXCreateTextureFromFile 和 SetTexture。SetTexture就不说了,每当用到Direct3D的某一个技术的时候,都是Set什么什么的,比如用到颜色,就SetColor,用到光照,就SetLight什么的。关键就是D3DXCreateTextureFromFile 函数读取了磁盘中的位图文件,然后将其转化为Texture格式。之后,就跟平常一样,给顶点赋值,然后设置索引,然后就开始画图。唯一和以前不一样的地方就是顶点赋值,多了个uv值,这个uv值,决定了三角形里面到底填充的到底是位图的那一部分。

  好了,就简单介绍到这里,我的笔记还是蛮水的,如果要进一步交流,请加QQ 550548715

  下面依然奉上代码,大家可以根据自己的需要调试修改。

  老规矩度盘链接:http://pan.baidu.com/s/1hqtfEZU  编译平台是 VS2010   工程已配置好,直接调试运行即可。