Q95:纹理映射(Texture Mapping)——地球仪
这一章节,我们要画的是地球仪。其实,就是先画个球,然后在球面上贴上世界地图。
95.1 纹理(Texture)
所谓“纹理”,对于单个像素点来说,其实就是该像素点的颜色。引入“纹理”的概念之后,单个像素点的颜色可以从不同的地方获得:其一,从程序之外的2D纹理图像中获得,这种纹理被称为“映射纹理(Mapping Texture)”;其二,可以在程序过程计算获得,这种纹理被称为“过程纹理(Procedural Texture)”。
我们这一章节学习的是“映射纹理”。将外部图片通过“纹理映射(Texture Mapping)”的方式映射到图形的单个像素点上。
之前,我们画的每个图形都只有单一的颜色。这个“单一的颜色”可以认为是“固定颜色(Constant Color)”纹理。为了保持和前续知识的连贯性,我们先引入“纹理”的概念,实现“固定颜色”纹理。
“Texture”的继承关系图如下:
基类Texture定义如下:
95.2 “固定颜色(ConstantColor)”类
定义如下:
95.3 “SV_Lambertian”类
我们是在给物体设置的“材料”属性中设置其“颜色”的。而“材料”则会将“颜色”设置到“BRDF”中。我们这里以漫射材料为例,所以对应的BRDF是Lambertian。
在给“材料”引入“纹理”的概念之后,“材料”对应的“颜色/纹理”是由纹理图片决定的,对应的BRDF是“空间变化的(Spatially Varying)”。取其两个首字母SV_作为BRDF的前缀。漫射材料对应的BRDF则为“SV_Lambertian”。该类定义如下:(主要是列出和Lambertian有差异的代码)
95.4 “SV_Matte”类
对应的材料换成“SV_Matte”类
95.5 “固定颜色”纹理图形测试
测试代码如下:
输出图形:
到目前为止,算是已经将“纹理”的概念并入了程序。接下来要做的是用“图片纹理”替换当前的“固定颜色纹理”。
95.6 将图片读入程序中
我们这里考虑的是ppm格式图片。ppm格式是将像素点的RGB颜色值直接保存的。读入ppm文件要比之前读入ply文件要简单。这里我们用“Image”类来读入图片。该类实现如下:
95.7 映射技术(Mapping Techniques)——Mapping类
将纹理图片中的像素值映射到物体上时,我们需要直到怎么将纹理图片上的点要映射到物体上的哪个点。所以,我们需要用到映射技术(Mapping Techniques)。“映射技术”做的事情是:怎么将纹理图片中的点映射到球面、圆柱面、圆锥面等等。其实,就是对应我们在“问题三十六”中学习过的Inverse Mapping。
我们先定义一个叫做“Mapping”的基类:
Mapping的继承关系图如下:
我们这里对应的是球面,所以需要实现“SphericalMap”类
95.8 “SphericalMap”类
95.8.1 理论分析
参考“问题三十六:ray tracing中的Inverse Mapping(1)——球面Inverse Mapping”:
http://blog.csdn.net/libing_zeng/article/details/54562305
95.8.2 C++代码实现
95.9 “ImageTexture”类
我们已经将纹理图片读入程序,同时也完成了球面上的点和纹理图片中像素点的映射。准备工作已经完成。现在,我们来实现和“ConstantColor”对应的“ImageTexture”类。
95.10 “图片纹理”图形测试
这里只需要将“95.5:“固定颜色”纹理图形测试”的测试代码中ConstantColor的部分换成ImageTexture部分即可:
纹理图片:
输出图形:
纹理图片:
输出图形:
纹理图片:
输出图形:
95.11 其他说明
完整代码下载路径:http://download.csdn.net/detail/libing_zeng/9791888
参考书籍:
[1]. Kevin Suffern, Ray Tracing from theGround Up, A K PetersLtd, 2007.
Q95:纹理映射(Texture Mapping)——地球仪相关推荐
- 计算机图形学七:纹理映射(Texture Mapping)及Mipmap技术
纹理映射及Mipmap技术 1 纹理映射(Texture Mapping) 2 纹理过小和纹理过大的问题及解决方案 2.1 纹理过小引发的问题 2.2 双线性插值(Bilinear Interpola ...
- GPU Gems2 - 12 基于贴面的纹理映射(Tile-Based Texture Mapping)
本文内容摘自https://zhuanlan.zhihu.com/p/38411575 [章节概览] 这章介绍了一个基于贴面的纹理映射(Tile-Based Texture Mapping)系统,用来 ...
- OpenCASCADE Texture Mapping
OpenCASCADE Texture Mapping eryar@163.com Abstract. 纹理贴图技术的出现和流行是图形显示技术的一个非常重要的里程碑,直接影响3D技术从工业进入娱乐领域 ...
- Games101 计算机图形学课程笔记: Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)
目录 Specular Term (Blinn-Phong) Specular Term 高光项 Ambient Term 环境项 Blinn-Phong Reflection模型效果 着色频率 fl ...
- General texture mapping resources
不错的资源,虽然现在还用不上,立志要收集它们 Resources: [1] Texture Mapping as a Fundamental Drawing Primitive http://www. ...
- Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes
首先,声明一下: 个人感觉这一章节有点鸡肋,因为通过"纹理映射"的方式给Triangle Meshes图形添加纹理貌似不太常用. 1,理论分析 能够通过"纹理映射&quo ...
- Q95:纹理映射(Texture Mapping)(2)——圆柱面
1,理论分析 圆柱面的纹理映射,可以仿照球面的纹理映射. 只需要定义圆柱面对应的"映射技术"(即OpenCylinderMap). 当然,也可以在OpenCylinder::hit ...
- 点云纹理映射 matlab,Spherical Texture Mapping Method for Large-scale Point Cloud Data
[1] 梁群仙,许宏丽.一种基于点云数据的快速曲面重构方法[J].计算机工程,2013,39(2):237-240. [2] 宋大虎,李忠科,孙玉春.三维散乱点云快速曲面重建算法[J].计算机应用研究 ...
- 着色Shading(2)(着色的继续、管线和纹理映射)(笔记)
文章目录 前言 四.高光项(Specular Term) 高光是什么 Blinn-Phong高光项 五.环境光照项(Ambient Term) 环境光照是什么 六.Blinn-Phong反射模型的总结 ...
最新文章
- python中,time、calendar、datetime
- sharepoint 2010 创建内容类型2
- 雾霾入侵机房会产生哪些危害?该如何防护?
- redis nosql_NoSql数据库:Cassandra,Mongo,Redis数据库比较
- SQL2000中@@ERROR的使用提醒
- 剖析ASSERT函数
- java jstat结果分析_JVM调优总结 + jstat 分析
- XGBoost原理及在Python中使用XGBoost
- Setting下的自定义控件LinearColorBar
- SNMP:简单网络管理协议(一)
- Reeder的本地使用
- mysql查询财两个人信息_MYSQL学习与数据库综合实验—数据查询实验
- 2019.9.27,SAP成都研究院数字创新空间团队建设,射箭和游泳
- 文件上传漏洞---Web渗透学习
- JdbcTemplate报空指针异常 已解决
- Idea 激活(MAC/WIN)使用教程
- 产业价值链-商业模式名词解释15
- 基于国产arm64 cpu+海之舟大数据操作系统建立大数据库
- 五彩斑斓的黑——优雅实现
- Visio安装 (无需卸载OFFICE)(解决安装冲突问题)