当前位置: 首页 > news >正文

Ray_Tracing_The_Next_Week下

5·image Texture Mapping 图像纹理映射

我们之前虽然在交点信息新增了uv属性,但其实并没有使用,而是通过p交点笛卡尔坐标确定瓷砖纹理或者大理石噪声纹理的值

现在通过uv坐标读取图片,通过std_image库stbi_load(path)加载图片,返回图片指针,我们直接将std_image文件放在src源码中使用就行

我们创建image_texture的图片纹理,它的颜色值是通过uv坐标从data*纹理获取的,并且我们的球体应用这个新纹理

然后在求交时,不要忘记更新交点信息的uv坐标,通过函数:

3d笛卡尔转极坐标
转到0---1的uv坐标

void get_sphere_uv(const vec3& p, double& u, double& v) {/* 从p交点-》极坐标-》uv对应值 */auto phi = atan2(p.z(), p.x());auto theta = asin(p.y());u = 1-(phi + pi) / (2*pi);v = (theta + pi/2) / pi;
}

然后在ray_color()求得交点的uv后,应该调用value()获取uv对应的颜色,这里由于继承体系,我们将从材质获取纹理添加getTexture()的虚函数,以便动态的调用纹理的value()

下图是随意找的一张jpg格式的地球贴图

6·Rectangles and Lights 矩形和光源

我们想要在场景加入矩形的灯光,因此首先新建发光材质

接着为了让光源的效果更清晰,我们让背景不在是天空,改为全黑的,所有光都来自于我们的矩形光源

我们创建矩形物体,并重写hit求交函数,那么如何求交呢?

定义一个轴对齐xy方向的平面,x0,x1,y0,y1,z,首先射线方程仅看z值,求得t,然后再分别将t带入xy的射线方程,即可求出xy,那么当xy在范围内,那么就是相交的

现在开始布置Cornell Box场景

7·Cornell Box

创建新的box实例,因为要考虑倾斜角度,我们先把轴对齐box创建出来

实例:是一种经过旋转过或者平移等操作的几何图元。光线追踪中是通过改变光线来模拟物体操作的

对于平移:物体移动offset,相当于光线 - offset,因为光线实际没有移动,被修改的rec仍要改回来

8`volumes 体积体


http://www.mrgr.cn/news/43489.html

相关文章:

  • 基于Pcap4j收发自定义协议报文(注意事项/踩坑总结)
  • 算法篇1:双指针思想的运用(1)--C++
  • Gitee创建仓库,提交代码到自己的fork,合并到主分支
  • No.4 笔记 | 探索网络安全:揭开Web世界的隐秘防线
  • 【可视化大屏】将柱状图引入到html页面中
  • C++ 异步编程 并发编程技术
  • C语言入门基础题(力扣):完成旅途的最少时间(C语言版)
  • CGLib动态代理和JDK动态代理Demo、ASM技术尝鲜
  • AbMole牛磺胆酸钠在构建大鼠急性胰腺炎模型中的应用
  • 环境可靠性
  • COPS论文总结——Lec17
  • 信息安全工程师(34)访问控制模型
  • 乌班图基础设施安装之Mysql8.0+Redis6.X安装
  • 前端的全栈混合之路Meteor篇(一):运行在浏览器端的数据库-MiniMongo介绍及其前后端数据实时同步示例
  • 数学建模 第四讲 - 数学规划模型
  • Python学习笔记-函数
  • 【网络篇】计算机网络——应用层详述(笔记)
  • Java 网络编程基础
  • 【408计算机考研课程】数据结构-数据结构在学什么?
  • 二叉树的中序&后序遍历——非递归版本