Q95:纹理映射(Texture Mapping)(2)——圆柱面

来源:互联网 发布:软件翻译器 编辑:程序博客网 时间:2024/06/06 09:36

1,理论分析

圆柱面的纹理映射,可以仿照球面的纹理映射。
只需要定义圆柱面对应的“映射技术”(即OpenCylinderMap)。

当然,也可以在OpenCylinder::hit()中计算撞击点时,计算出纹理映射相关的u、v值。为什么可以这么做?我们先看一下ImageTexture::get_color()中计算纹理图片中位置(row,column)的两种方式:
这里写图片描述

所以只需要在OpenCylinder::hit()中计算撞击点时添加如下代码段即可:
这里写图片描述
这段代码的原理可以参考“问题三十六(4)”:
http://blog.csdn.net/libing_zeng/article/details/54562516

2,测试图形

测试代码:

和球面测试时差不多,只需要做如下修改:

1,将新建“映射技术”对象的代码注视掉:
// SphericalMap* map_ptr = new SphericalMap;
2,将之前新建球面对象的代码换成新建圆柱面;

输出图形:

纹理图片:
这里写图片描述

输出图形:
这里写图片描述

纹理图片:
这里写图片描述

输出图片:
这里写图片描述

3,Referrance:

[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.
[2]. http://blog.csdn.net/libing_zeng/article/details/54562516
[3]. http://blog.csdn.net/libing_zeng/article/details/65625675

4 0
原创粉丝点击