问题三十六:ray tracing中的Inverse Mapping(0)——概要
来源:互联网 发布:绿色傲剑八卦升级数据 编辑:程序博客网 时间:2024/06/09 03:42
Inverse Mapping指的是某点在某面的相对位置,这个“相对位置”用u、v表示。 Inverse Mapping完成后,相当于将某面映射到了uv平面,u、v的取值范围为[0, 1]。
这一章节会讲到球面、凸四边形(含三角形)、圆、圆柱面、圆锥面五类面的Inverse Mapping。
为了对比各种面的Inverse Mapping效果,我们用同一个uv平面:
也就是说,以上提到的五类曲面(平面)影射后的uv平面的图都是这一张。那么,问题来了,对于这五类曲面(平面)本身应该分别是什么样子呢(才能最终都映射成这么一样图)?这一章节,就是解决这么个问题。
首先,我们现在在lambertian.cpp中对uv平面这张图描述一下(对应八个色块):
----------------------------------------------lambertian.cpp ------------------------------------------
lambertian.cpp
vec3 get_albedo(float u, float v) { if ((v >= 0) && (v < 0.5)) { if ((u >= 0) && (u < 0.25)) { return vec3(0, 0, 0);//黑色块 } else if ((u >= 0.25) && (u < 0.5)) { return vec3(0, 0, 1);//蓝色块 } else if ((u >= 0.5) && (u < 0.75)) { return vec3(0, 1, 0); //绿色块 } else { return vec3(0, 1, 1); //浅蓝色块 } } else if ((v >= 0.5) && (v <= 1.0)) { if ((u >= 0) && (u < 0.25)) { return vec3(1, 0, 0);//红色块 } else if ((u >= 0.25) && (u < 0.5)) { return vec3(1, 0, 1);//紫色块 } else if ((u >= 0.5) && (u < 0.75)) { return vec3(1, 1, 0);//黄色块 } else if ((u >= 0.75) && (u <= 1.0)) { return vec3(1, 1, 1);//浅紫色块 } }}// lambertian::scatter也配合改动一下bool lambertian::scatter(const ray& r_in, const hit_record& rec, vec3& attenuation, ray& scattered) const {// std::cout << "-------------lambertian::scatter----------------" << endl; vec3 target = rec.p + rec.normal + random_in_unit_sphere(); scattered = ray(rec.p, target-rec.p);if ((rec.u >= 0.0) && (rec.u <= 1.0) && (rec.v >= 0.0) && (rec.v <= 1.0)) {//映射后的u、v在[0, 1],在物体的hit()会对u、v进行赋值;如果不做映射,则u、v设置为-1,在这里,attenuation还是返回原来的albedo。 attenuation = get_albedo(rec.u, rec.v); } else { attenuation = albedo; } return true;}
4 0
- 问题三十六:ray tracing中的Inverse Mapping(0)——概要
- 问题三十六:ray tracing中的Inverse Mapping(1)——球面Inverse Mapping
- 问题三十六:ray tracing中的Inverse Mapping(3)——圆盘Inverse Mapping
- 问题三十六:ray tracing中的Inverse Mapping(4)——圆柱面Inverse Mapping
- 问题三十六:ray tracing中的Inverse Mapping(5)——圆锥面Inverse Mapping
- 问题三十六:ray tracing中的Inverse Mapping(6)——汇总
- 问题三十六:ray tracing中的Inverse Mapping(2)——凸四边形(含三角形)Inverse Maping
- 问题三十一:ray tracing中Convex Quadrilateral Inverse Mapping
- 《An Introduction to Ray Tracing》——2.2 Ray/Sphere Intersection And Mapping
- 《An Introduction to Ray Tracing》——2.3 Ray/Polygon Intersection And Mapping
- 《An Introduction to Ray Tracing》—— 2.5 Ray/Quadric Intersection And Mapping
- 问题六十八: 着色模型(shading model)(0)——《Ray Tracing from the Ground Up》代码的移植
- Q78:规则网格(Regular Grids)——Ray Tracing中的一种加速技术
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(1)——椭球面
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(3)——椭球抛物面
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(5)——汇总
- 问题六十三:怎么用ray tracing画sphere sweeping图形(2)——teapot
- 《Ray Tracing in One Weekend》——Chapter 0: Overview
- zoj2243
- Mac下安装及配置Eclipse
- activiti5工作流入门小程序
- 模板类的前置声明
- 数组静态初始化
- 问题三十六:ray tracing中的Inverse Mapping(0)——概要
- React Native控件之Text组件介绍
- spring与mybatis整合总结
- comsol5.2使用方法心得(20170115更)
- Spring4.1+Hibernate4.3报org.hibernate.cache.spi.RegionFactory或org.hibernate.engine.spi.CacheImplement
- Mxnet学习笔记(1)--源码中的装饰器理解
- Day 06 JSP
- 九度 oj 题目1081:递推数列
- Android React Native加载图片资源的正确姿势