Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes

首先,声明一下:
个人感觉这一章节有点鸡肋,因为通过“纹理映射”的方式给Triangle Meshes图形添加纹理貌似不太常用。

1,理论分析

能够通过“纹理映射”的方式给Triangle Meshes图形添加纹理的前提条件是“图形对应的PLY文件中每个顶点包含纹理参数u、v”(如下图所示)。但是,这样的PLY文件貌似不太好找(反正本人是没有找到)。
Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第1张图片

书上也只是拿之前介绍过的“两个三角形”来说明方法的可行性。
(这里的书指的是《Ray Tracing from the Ground Up》;“两个三角形”的PLY文件如上图所示。之前生成的图形如下图所示)
Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第2张图片

基于当前的程序,通过“纹理映射”的方式给Triangle Meshes图形添加纹理,我们需要做如下修改:
1,读取PLY文件中的u、v数据;
2,对u、v的值进行插值得到撞击点的u、v值;

1.1,读取PLY文件中的u、v数据;

相关代码截图如下:
Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第3张图片

1.2,对u、v的值进行插值得到撞击点的u、v值

首先,按照如下继承关系添加两个新的类:
Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第4张图片

相关代码截图如下:

Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第5张图片

Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第6张图片

2,图形测试

测试代码:

Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第7张图片
Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第8张图片

输出图形:

纹理图片:
Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第9张图片

输出图形:

前边是平坦(flat)着色的图形;后边是平滑(smooth)着色的图形:
Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第10张图片 Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes_第11张图片

3,其他说明

完整代码下载路径:
http://download.csdn.net/detail/libing_zeng/9792810

Referrance:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.

你可能感兴趣的:(C++,ray,trace,computer,graphics)