光线追踪RayTracing,基本原理,判断物体与光线相交

news/2024/7/21 7:32:21 标签: 算法, 计算机视觉, 图像处理

光线的三点假设:

  1. 光线按直线传播
  2. 光线之间不会发生碰撞
  3. 光线会经过一系列折射反射进入摄像机
    可以从摄像机发出光线,推出可逆的光路
    在这里插入图片描述
    上图中,透明球在与相机直连的线条处,需要将折射和反射的着色点结果相加,如果有光源直射,需要将光源在该点的着色结果也相加
    在这里插入图片描述
    相机直射出的第一条光线为primary Ray,之后做处理的均被称为secondaryRay,与光源的连线被称为shadowRay
  • 光线定义
    在这里插入图片描述
    对于球表面求光线交点
    在这里插入图片描述
    之后解得t的值:
    在这里插入图片描述
    在这里插入图片描述
    t:首先是正数
    在可以分多种情况讨论,相离相交相切
  • 总过程可总结为:
    在这里插入图片描述
  • 关于光线和物体求交
    如果光源在物体内,则与物体交点一定是奇数个,否则一定为偶数个
  • 光线和物体求交
  • 与三角形求交
    可以首先将这个问题转化为光线和平面求交,再判断交点是否在三角形内
  • 如何定义一个平面?
    记录该平面上一个点p,和该平面的法线,即可定义一个平面
    在这里插入图片描述
    上图中,N为法线,p’为平面上的一个点,平面内任意一个点p可以满足该式子
    带入光线射入的公式可得出t的值,从而可得光线与该平面的焦点
    在这里插入图片描述
    最后根据重心坐标的知识得出该点是否在三角形内。
  • 另一种方法Moller Trumbore算法
    解这个式子主要通过矩阵形式解
    在这里插入图片描述
  • AABB包围盒(包围体积)
    Axis-Aligned Bounding Box轴对齐包围盒
    如果针对物体上每一个三角形都判断是否会被光线照射到,那么带来的消耗将会非常大,所以引入AABB包围盒机制来对判断光线照射这个过程进行加速,如果光线碰不到包围盒的话,就不可能碰到物体上任何一个三角形
    在这里插入图片描述
  • 光线和包围盒相交
    在这里插入图片描述
    上图中,找到光线经过x0,x1平面的时间,找到光线经过y0,y1的时间,通过交集的性质求得tmin和tmax,如果最后的结果是tmax > tmin,那么说明光线穿过了包围盒
    那么对于3D包围盒求tmin和tmax:
    在这里插入图片描述
    如果光线进入时间为负,离开时间为正,则说明光源在包围盒内
    那么有:
    在这里插入图片描述

http://www.niftyadmin.cn/n/421246.html

相关文章

算法提高-图论- 最小生成树

最小生成树 最小生成树AcWing 1140. 最短网络AcWing 1141. 局域网AcWing 1142. 繁忙的都市AcWing 1143. 联络员AcWing 1144. 连接格点 最小生成树 AcWing 1140. 最短网络 #include <iostream> #include <cstring>using namespace std;const int N 110;int w[N][…

第十四届蓝桥杯大赛软件组国赛 Python大学A组 个人暴力题解

Powered by:NEFU AB-IN 文章目录 国赛 Python大学A组 个人暴力题解A思路代码 B思路代码 C思路代码 D思路代码 E思路代码 F思路代码 G思路代码 H思路代码 I思路代码 &#xff01;&#xff01;&#xff01;博主个人的暴力题解&#xff0c;基本很少是正解&#xff0c;求轻喷 &…

【Socket】express里使用Socket.io | socket广播

Socket简介 后端、前端实时推送、发送消息 用作场景&#xff1a; 用户A给用户B点赞、评论时 &#xff0c;用户B收到用户A的点赞、评论通知用户在线、离线状态聊天、群聊相关等… socket官方 - https://socket.io/zh-CNnpm - https://www.npmjs.com/package/socket.io socket.…

(转载)基于蚁群算法的三维路径规划(matlab实现)

1 理论基础 1.1 三维路径规划问题概述 三维路径规划指在已知三维地图中&#xff0c;规划出一条从出发点到目标点满足某项指标最优&#xff0c;并且避开了所有三维障碍物的三维最优路径。现有的路径规划算法中&#xff0c;大部分算法是在二维规划平面或准二维规划平面中进行路…

【SpringMVC】SSM整合

1&#xff0c;SSM整合 前面我们已经把Mybatis、Spring和SpringMVC三个框架进行了学习&#xff0c;今天主要的内容就是把这三个框架整合在一起完成我们的业务功能开发&#xff0c;具体如何来整合&#xff0c;我们一步步来学习。 1. 流程分析 (1) 创建工程 创建一个Maven的web…

java之知识点的小备注(持续更新中......)

获取文件路径之Thread String path Thread.currentThread().getContextClassLoader().getResource("application.properties").getPath();Thread.currentThread() 获取当前线程 getContextClassLoader() 获取当前线程的类加载器对象 getResource(“”) 获取当前线程…

【外企面试系列】必备口语短语与例句 - A系列

a big headache令人头痛的事情 I have a big headache from all the noise. (我因为噪音而头痛。)The paperwork is a big headache for me. (对我来说&#xff0c;文书工作是件头痛的事情。) a fraction of 一部分 She ate only a fraction of her meal. (她只吃了一部分饭…

Android:事件分发机制

分发脉络图 点击事件分为四件&#xff1a;down、move、up、cancel&#xff0c;前三个是我们要关注的 事件分成层次分为四层&#xff1a;Activity、ViewGroup、View 涉及的方法分为三个&#xff1a;dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 分发规律 Activ…