问题三十六:ray tracing中的Inverse Mapping(3)——圆盘Inverse Mapping
36.3 圆盘Inverse Mapping
36.3.1 数学推导
我们只考虑圆盘垂直于ZOX平面的情况。
36.3.2 看C++代码实现
----------------------------------------------elliptic_plane.cpp ------------------------------------------
elliptic_plane.cpp
#include "elliptic_plane.h"#include <iostream>
using namespace std;bool elliptic_plane::hit(const ray& r, float t_min, float t_max, hit_record& rec) const {
#if ELLIPTIC_PLANE_LOG == 1std::cout << "-------------elliptic_plane::hit----------------" << endl;
#endif // ELLIPTIC_PLANE_LOGif(dot(normal, r.direction()) == 0) {return false;}else {if (dot(normal, r.direction()) > 0) {rec.normal = - normal;}float temp = (dot(normal, center) - dot(normal, r.origin())) / dot(normal, r.direction());if (temp < t_max && temp > t_min) {rec.t = temp;rec.p = r.point_at_parameter(rec.t);if (((((rec.p.x()-center.x())*(rec.p.x()-center.x())) / (intercept_x*intercept_x))+ (((rec.p.y()-center.y())*(rec.p.y()-center.y())) / (intercept_y*intercept_y))+ (((rec.p.z()-center.z())*(rec.p.z()-center.z())) / (intercept_z*intercept_z))) <= 1) {rec.mat_ptr = ma;
if ((intercept_x == intercept_y) && (intercept_y == intercept_z)) {rec.v = sqrt(((rec.p.x()-center.x())*(rec.p.x()-center.x()) + (rec.p.y()-center.y())*(rec.p.y()-center.y())) / (intercept_x*intercept_x));vec3 pc1 = vec3(rec.p.x()-center.x(), rec.p.y()-center.y(), 0);vec3 vx = vec3(1, 0, 0);float u = acos(dot(pc1, vx) / (pc1.length()*vx.length())) / (2*M_PI);
/* float u = acos((rec.p.x()-center.x()) /
sqrt((rec.p.x()-center.x())*(rec.p.x()-center.x())
+ (rec.p.y()-center.y())*(rec.p.y()-center.y()))) / (2*M_PI);
*/
if ((rec.p.y()-center.y()) < 0) {rec.u = 1 - u;}else {rec.u = u;}}else {rec.u = -1.0;rec.v = -1.0;}
return true;}}return false;}
}
----------------------------------------------main.cpp ------------------------------------------
main.cpp
hitable *list[2];list[0] = new sphere(vec3(0.0,-100,0), 100, new lambertian(vec3(0.8, 0.8, 0.0)));list[1] = new elliptic_plane(vec3(0.0, 2.5, 0), vec3(0, 0, 1), 2.5, 2.5, 2.5, new lambertian(vec3(0.8, 0.8, 0.0)));hitable *world = new hitable_list(list,2);vec3 lookfrom(0, 2.5, 20);vec3 lookat(0, 2.5, 0);float dist_to_focus = (lookfrom - lookat).length();float aperture = 0.0;camera cam(lookfrom, lookat, vec3(0,1,0), 20, float(nx)/float(ny), aperture, 0.7*dist_to_focus);
输出图片:
uv原图:
问题三十六:ray tracing中的Inverse Mapping(3)——圆盘Inverse Mapping相关推荐
- 问题三十一:ray tracing中Convex Quadrilateral Inverse Mapping
从这一章节开始,主要是学习<An Introduction to Ray Tracing> 光线和多边形相交问题的求解: 1,光线和多边形所在的平面相交,求出交点: 2,判断交点是否在多边 ...
- 智能一代云平台(三十六):项目中如何做到避免传递依赖
[前言] 现在Maven项目风靡全球,不可否认的是Maven在解决项目依赖关系十分的给力:不过传递依赖也会有很多坑:接下来给大家分享一下我们项目中是如何解决传递依赖. [传递依赖中哪些事儿] ...
- PreScan快速入门到精通第三十六讲PreScan中使用车道线传感器
车道标记传感器提供有关道路上存在的车道线的信息.这些信息以车道线和扫描线相对于传感器的交叉点的形式提供.车道标记传感器的功能和使用可以在车道保持的例子中找到. 车道标记数据 主要是,车道标记传感器提 ...
- 三十六、Scrapy 中的复写默认管道和Rule扩展
@Author:Runsen scrapy中的强大媒体管道(二) 上文用scrapy 爬百度美女图片,补充如何重写默认管道知识点,当年爬取的网站是:http://www.27270.com/.但是这里 ...
- php分享(三十六)mysql中关联表更新
一:关联不同的表更新 1: 通过where关联更新 update student s, city c set s.province_name = c.province_name, s.city_nam ...
- 三十六、Java集合中的HashMap
@Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...
- Python编程基础:第三十六节 模块Modules
第三十六节 模块Modules 前言 实践 前言 我们目前所有的代码都写在一个文档里面.如果你的项目比较大,那么把所有功能写在一个文件里就非常不便于后期维护.为了提高我们代码的可读性,降低后期维护的成 ...
- OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC
OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...
- NeHe OpenGL教程 第三十六课:从渲染到纹理
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 三十六、rsync通过服务同步、Linux系统日志、screen工具
三十六.rsync通过服务同步.Linux系统日志.screen工具 一.rsync通过服务同步 该方式可以理解为:在远程主机上建立一个rsync的服务器,在服务器上配置好各种应用,然后本机将作为客户 ...
最新文章
- 微信小程序-京东购物系列一
- pixhawk原生固件笔记
- iOS中的WiFi与硬件通信
- oracle session_wait,转载:学习Oracle动态性能表-(8)-V$SESSION_WAIT,V$SESSION_EVENT
- springboot 之Spring Web Mvc Framework
- 是自学前端还是培训学前端?
- 如何查看泛泰A870高通骁龙600(APQ8064T)的CPU体质(A850/A860也可参考)
- squid代理服务器的应用
- webmagic保存html页面,WebMagic抓取前端Ajax渲染的页面
- 来自清华学子的一个自述---在树洞里
- h5页面如何切图_H5设计稿切图按照什么尺寸,微信公众号版本的
- 恒源智GPU云服务器
- 直播 | 2017阿里双11在线技术峰会
- javac java编译-g
- 仿站高手是怎么练成的 分析仿站必备知识总结
- graphpad做图如何加星号_graphpad prism 8.0 - 不用 PS,两招教你做出能发高分 SCI 的组合图!...
- 关于 java.util.LinkedHashMap cannot be cast to xxx错误的解决方案
- 在word2016中使用宏(VBA)来自动设置表格行高
- vue 海康视频播放
- html 移动端缩小显示图片,Vue移动端可放大缩小图片vue-photo-preview