Games101,Lecture 13(光线与物体求交,引入包围盒)

2023-11-15

光线追踪

光线追踪更多的用于离线应用。
因为一帧一般需要一万个CPU小时。

原理

由摄像机发出感应光线,判断与物体相交的点是否可以与。光源连线(无遮挡物)。

如何判断光线与物体有交点,是管线追踪中较难的部分。

光线与物体求交

1.与隐式表示的曲面求交

通过 光线方程 与 曲面方程求解 是否有根 判断光线与曲面是否有交点。

2、与显式表面(三角形)求交

补充:可以通过光线与三角形求交,还可以判断光线是否在三角形内。

光线与三角形求交可以分解成两个物体:

  1. 光线与平面相交
  2. 判定交点是否在三角形内

如何判断点在平面内

在这里插入图片描述
平面用一个向量,和一个点 P ‘ P‘ P表示。若p点在面内,则 ( p − p ′ ) ∗ N = 0 (p-p')*N = 0 (pp)N=0
P = O + t D P=O+tD P=O+tD带入式中 ⇒ \Rightarrow
在这里插入图片描述

一种更为简便的方法(Moller Trumbore算法)

将点在三角形内公式与直线方程直接联系得
在这里插入图片描述

求解:

在这里插入图片描述

在这里插入图片描述
解得 t , b 1 , b 2 t,b_1,b_2 t,b1,b2,若t为正,b1>0,b2>0,b1+b2<1。则点在三角形内

计算:
原 式 ⇒ t ∗ ( − D ⃗ ) + b 1 ∗ ( P 1 ⃗ − P 0 ⃗ ) + b 2 ∗ ( P 2 ⃗ − P 0 ⃗ ) = O ⃗ − P 0 ⃗ 原式\Rightarrow t*(-\vec D) + b_1*(\vec {P_1} - \vec {P_0}) + b_2*(\vec {P_2} - \vec {P_0}) = \vec O - \vec {P_0} t(D )+b1(P1 P0 )+b2(P2 P0 )=O P0
E 1 , E 2 , S E_1,E_2,S E1,E2,S代入得
原 式 ⇒ [ − D ⃗ , E 1 ⃗ , E 2 ⃗ ] [ t b 1 b 2 ] = S ⃗ 原式\Rightarrow \begin{bmatrix} -\vec D ,& \vec{E_1}, & \vec{E_2} \end{bmatrix} \begin{bmatrix} t \\ b_1 \\ b_2 \end{bmatrix}= \vec S [D ,E1 ,E2 ]tb1b2=S
之后应该是对 [ − D ⃗ , E 1 ⃗ , E 2 ⃗ ] \begin{bmatrix} -\vec D ,& \vec{E_1}, & \vec{E_2} \end{bmatrix} [D ,E1 ,E2 ]求逆,至于求逆后为什么会简化为上面的式子,我就不知道了!!

算法复杂度:

在这里插入图片描述

光线与表面求交加速方法

如果一条光线和每个三角形求交,那么太慢了,Cost = 光线数*三角形数*求交复杂度。

包围盒

使用包围盒(完全)包裹某个物体,如果光线和包围盒都没有交点,那么更不可能与包围盒内的三角形相交。

Axis-Aligned Bounding Box(轴对齐包围盒)

包围盒以x,y,z轴为法线定义。

判定光线和盒子求交

在这里插入图片描述
对于一条光线, P ( x , y , z ) = O ( x , y , z ) + d ( x ′ , y ′ , z ′ ) ∗ t ; P(x,y,z) = O(x,y,z)+d(x',y',z')*t; P(x,y,z)=O(x,y,z)+d(x,y,z)t;
定能求出 x = x 0 , x = x 1 x=x_0,x=x_1 x=x0,x=x1时的 t m i n , t m a x t_{min},t_{max} tmin,tmax,y,z轴同理。(t可能为负)

  1. 求出x,y,z轴分别对应的 t m i n , t m a x t_{min},t_{max} tmin,tmax
  2. 求出三个 t m i n t_{min} tmin的最大值 t e n t e r t_{enter} tenter,三个 t m a x t_{max} tmax的最小值 t e x i t t_{exit} texit
  3. 如果 t e n t e r < t e x i t t_{enter} < t_{exit} tenter<texit,则光线可能通过包围盒。
  4. 特别判断:
    如果 t e x i t < 0 t_{exit}<0 texit<0,物体在光线背后。无交点。
    如果 t e x i t > 0 , t e n t e r < 0 t_{exit}>0,t_{enter}<0 texit>0,tenter<0,光线在盒子里面,一定有交点。
    综上:当且仅当 t e n t e r < t e x i t & & t e x i t > 0 t_{enter} < t_{exit} \&\& t_{exit}>0 tenter<texit&&texit>0 则一定有交点。

如何理解:

  • 当且仅当光线进入所有轴方向,光线才会进入包围盒。
  • 当且仅当光线离开任何一个轴方向,光线就会离开包围盒。

下一节课再讲解对光线与表面求交的其他更块的算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Games101,Lecture 13(光线与物体求交,引入包围盒) 的相关文章

  • 光 线 追 踪

    本文首先将会介绍光线追踪的类别族谱 介绍其公共部分 之后我们会分别对其中的每一个进行详细地剖析 光线追踪 Ray tracing 是一个拥有历史感的词汇 图形学从业者从neutron transport heat transfer和illu
  • games101,lecture11(obj文件)

    OBJ 这里的obj是一个文本文件 和编译生成的obj文件是不一样的 更多详解 https blog csdn net shenshen211 article details 51740988 添加链接描述 https www jiansh
  • openGL之API学习(二十七)glEnable

    开启服务器端的opengl功能 void glEnable GLenum cap GL BLEND If enabled blend the computed fragment color values with the values in
  • openGL之API学习(七十二)opengl调试Debug

    现在支持GLSL和OpenGL跟步调试的只有Nvidia的Nsight 只支持Nvidia的显卡 其他的基本都是track 不支持GLSL的跟步调试 比如AMD的GPUPerfClient以及gDEBugger 还有AMD的GPU Shad
  • 卡通渲染技巧(三)——崩坏3卡通渲染实践

    系列链接 卡通渲染技巧 一 漫反射部分 卡通渲染技巧 二 高光部分 描边 卡通渲染技巧 三 崩坏3卡通渲染实践 耳听为虚眼见为实 不实际看一下你永远不知道技术分享里吹了多少牛 其实是没有实际应用到游戏里 前排赞美 SnapDragon Pr
  • games101课程作业,在Vs2019环境下的配置环境(不使用虚拟机)

    为什么不使用虚拟机 因为虚拟机使用ubuntu x64版本系统 是一个从未接触过的系统 不好使用 虚拟机中无法使用中文输入法 无法对代码进行注释 不利于学习 虚拟机性能差 打开两三个文件就卡 令人抓狂 要使用终端进行编译 很是麻烦 还是喜欢
  • 【图形学】GAMES101 Assignment3 作业框架分析

    GAMES101 Assignment3 作业框架分析 文章目录 GAMES101 Assignment3 作业框架分析 rasterizer draw rasterizer rasterize triangle 参考 写作业之前看了一眼代
  • opengl库中gl glu glut glaux的区别

    GL GLU GLUT的关系 OpenGL中的gl库是核心库 glu是实用库 glut是实用工具库 gl是核心 glu是对gl的部分封装 glut是OpenGL的跨平台工具库 gl中包含了最基本的3D函数 而glu似乎对gl的辅助 如果算数
  • openGL之API学习(三十)深度缓冲区深度值为负值

    通过 glReadPixels 0 0 WINDOW WIDTH WINDOW HEIGHT GL DEPTH COMPONENT GL UNSIGNED BYTE tmpPixelsBuffer 从帧缓冲区中读取深度信息 深度值竟然是负值
  • 【GAMES101闫令琪图形学】作业0(配置开发环境)

    去games101往期作业汇总帖下载作业0的压缩包 作业0是让你配环境的 很简单 操作系统 VirtualBox虚拟机 Ubuntu20 04 比课程提供的虚拟硬盘版本更高 安装eigen和cmake sudo apt get instal
  • openGL之API学习(六)如何绑定深度缓冲区到片元着色器

    本质是使用帧缓冲区glBindFramebuffer GL FRAMEBUFFER m fbo 深度缓存是帧缓冲区的一个挂载点 在OpenGL中3d管线输出的结果称为 帧缓冲对象 简称FBO FBO可以挂载颜色缓冲 在屏幕上显示 深度缓冲区
  • 计算机图形学入门(一)-线性代数部分知识1

    本部分主要介绍了向量的点乘与叉乘在图形学中的基本应用 介绍了图形学中常用的2D矩阵变换 例如缩放 对称 切变换 旋转 平移 逆变换 组合变换和分解变换 还有在图形学中为了简化操作而采取的添加维度的方法 主要的学习过程来自下面的视频 本文只会
  • 计算机图形学GAMES101(十五)光线追踪(蒙特卡洛积分与路径追踪)

    本节涉及内容 蒙特卡罗积分 路径追踪 蒙特卡罗积分 蒙特卡罗积分的核心思想还是求一个不规则图形的面积 它的做法是 首先在a和b之间找一个值xi然后求f x 接着以f x 为高 ab为宽求矩形的面积 最后将所有的值求平均 当采样数量xi趋于无
  • 【openGL2021版】天空盒

    openGL2021版 天空盒 大家好 我是Lampard猿奋 欢迎来到船新的openGL基础系列的博客 今天主要实现的是天空盒 1 什么是天空盒 上周我们已经实现了FPS式的摄像机控制 键盘的 WSAD 可以控制摄像头的前后左右移动 鼠标
  • 光线追踪渲染实战(五):低差异序列与重要性采样,加速收敛!

    项目代码仓库 GitHub https github com AKGWSB EzRT gitee https gitee com AKGWSB EzRT 目录 前言 1 低差异序列介绍 2 sobol 序列及其实现 2 1 生成矩阵与递推式
  • 【翻译】Dagre-D3 文档整理和翻译

    地址 github Dagre D3 目录 文章目录 dagre d3 设计优先级 安装 npm Bower Browser Scripts 源代码构建 如何使用Darge 聚焦渲染 例子 配置布局 生成的图像 第三部分例子 推荐阅读 da
  • 【openGL2021版】链接FBX模型库

    openGL2021版 链接FBX模型库 大家好 我是Lampard猿奋 欢迎来到船新的openGL基础系列的博客 今天主要实现的是链接FBX模型第三方库 一 demo回顾 上周我已经实现了粒子系统 可以看到场景中已经存在着像萤火虫一样的闪
  • VS2019下的GAMES101作业环境配置

    序 很久很久以前 好像看过这个 GAMES101 现代计算机图形学入门 闫令琪 哔哩哔哩 bilibili 里面好像还有一个实验 当时只是看了看视频里的热闹 并没有写实验 现在想想 还是写一写的好 万一以后用上了呢 虽然是个24K纯小白 估
  • openGL之API学习(六十九)水平同步 垂直同步

    垂直和水平是CRT中两个基本的同步信号 水平同步信号决定了CRT画出一条横越屏幕线的时间 垂直同步信号决定了CRT从屏幕顶部画到底部 再返回原始位置的时间 而恰恰是垂直同步代表着CRT显示器的刷新率水平 垂直同步打开 那么在游戏中 或许强劲
  • 计算机图形学---常用颜色模型汇总(RGB,CMY,HSV)

    本文整理自西安交通大学软件学院祝继华老师的计算机图形学课件 请勿转载 文章目录 常用颜色模型 RGB颜色模型 CMY颜色模型 HSV颜色模型 常用颜色模型 颜色模型 某个三维颜色空间中的一个可见光子集 包含某个颜色域的所有颜色 用途 在某个

随机推荐

  • Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

    Python实现输入电影名字自动生成豆瓣评论词云图 带GUI界面 小程序 一 项目背景 电影逐渐成为人们生活的不可或缺的一部分 而了解一部电影的可以通过电影评分与大众推荐度 但以上的方式都太过于片面 了解一部电影的方法是通过已经观看完电影的
  • Windows CE嵌入式导航系统研究(应用程序相关)

    1 1 1 TCPMP多媒体播放器 本系统中采用的多媒体播放器是TCPMP TCPMP播放器播放速度很快且支持多达几十中多媒体格式 TCPMP开源项目 同时支持Windows CE操作系统 而且提供很好的扩展性 例如需要重新编写TCPMP界
  • 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

    258 各位相加 难度简单475 给定一个非负整数 num 反复将各个位上的数字相加 直到结果为一位数 返回这个结果 示例 1 输入 num 38 输出 2 解释 各位相加的过程为 38 gt 3 8 gt 11 11 gt 1 1 gt
  • 大文件上传服务器jvm调优,JVM性能调优的6大步骤,及关键调优参数详解

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减小GC的频率和Full GC的次数 算法 1 Full GC编程 会对整个堆进行整理 包括Young Tenured和Perm Full GC由于须要对整个堆进行回收 因此比较慢 所以
  • 【Flutter 2-11】Flutter手把手教程UI布局和Widget——列表ListView

    作者 弗拉德 来源 弗拉德 公众号 fulade me ListView ListView是在移动端非常常见的控件 在大多数的展示场景中都离不开ListView 在Flutter中对ListView的封装也非常好 简单几行代码就可以满足我们
  • 马尔萨斯 ( Malthus)人口指数增长模型&Logistic 模型

    3 要求与任务 从 1790 1990 年间美国每隔 10 年的人口记录如下表所示 用以上数据检验马尔萨斯 Malthus 人口指数增长模型 根据检验结果进一步讨论马尔萨斯 人口模型的改进 并利用至少两种模型来预测美国2010 年的人口数量
  • wandb安装方法及本地部署教程

    文章目录 1 wandb介绍 2 wandb安装 2 1 注册wandb账号 2 2 创建项目并获得密钥 2 3 安装wandb并登录 3 wandb本地部署 3 1 设置wandb运行模式 3 2 云端查看运行数据 4 总结 1 wand
  • 游戏开发unity编辑器扩展知识系列:扩展Hierarchy右键菜单

    代码如下 MenuItem GameObject 生成带图片的Image false 100 public void Test 效果如下 注意 MenuItem的priority参数必须小于50 MenuItem的itemName参数只支持
  • Postman和jmeter的区别(整理)

    1 创建接口用例集 没区别 Postman是Collections Jmeter是线程组 没什么区别 2 步骤的实现 有区别 Postman和jmeter都是创建http请求 a postman请求的请求URL是一个整体 jmeter分成了
  • GPU压力测试篇- TensorFlow

    简介 该文档介绍使用Tensorflow框架 测试 NVIDIA 驱动的常见python 代码 环境信息 编号 软件 软件版本 备注 01 驱动 470 57 02 02 cuda 版本 11 2 03 cudnn 版本 8 1 1 33
  • Qt控件在布局内(QFormLayout、QGridLayout等)的动态添加与删除

    项目场景 在项目开发过程中 比如报警信息的显示 如果将所有的报警信息都添加至布局内 再以控件隐藏与显示的方式进行报警 这种方法无疑是最简单的 但是如果报警种类过多 但往往需要显示的很少 在界面里面去一个个拖控件或者代码添加都太麻烦 这就需要
  • PMP常用英文术语缩写总结(文字版+表格版+图片版)

    PMP常用英文术语缩写总结 文字版 表格版 图片版 文字版 PMBOK Project Management Body of Knowledge 项目管理知识体系 PMI Project Management Institute 项目管理协
  • 数据结构--图的应用--最短路径

    最短路径 两种常见的最短路径问题 一 单源最短路径 用Dijistra迪杰斯特拉 算法 二 所有顶点间的最短路径 用Floyd 弗洛伊德 算法 Dijistra算法 1 初始化 先找出从源点v0到各终点Vk的的直达路径 V0 Vk 即通过一
  • 【element-plus】icon在菜单的使用(二)

    前言 之前觉得升级的icon不好使用是以为不能动态的设置图标 现在发现我错了 升级后的icon同样能满足之前的需求 本篇主要说明一下配置菜单时如何使用icon 一 下载依赖包 因为动态引入的icon随时都会调整 所以之前引入所有的icon最
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】VLAN资源池

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 VLAN资源池 知识点数组字符串 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 VLAN是一种对局域网设备进行逻辑划分的技术 为了标识不同的VLAN 引入VLAN I
  • C++字符串 处理函数合集

    本博客的内容源自 数据结构 用面向对象方法与C 描述 第二版 的内容 章节4 4 在阅读原文的情况下整理得出的读书笔记 均写在代码的注释中 供大家参考 include
  • HDF5 windows编译 release版本、Debug版本

    由于最近急需的一个项目 需要hdf5库 误打误撞 编译成功 特此记录 1 下载源代码 官网下载地址 https portal hdfgroup org display support HDF5 1 12 2 files 找到如下地址 本人电
  • 设计模式 -- Adapter 适配器模式

    转自 http blog csdn net joyney article details 4000818 以下内容是我和小组的兄弟学习设计模式我做的课件 我整理出来和大家分享 有不妥之处敬请指出 上次做的桥接模式 Bridge 这次是适配器
  • 小程序wxs使用教程

    1 什么是wxs wxs是小程序的一种脚本语言 它类似JavaScript 但是与JavaScript有所不同 wxs是一种数据绑定和逻辑处理的语言 它可以在wxml中使用 并且可以在wxml中直接调用 使用wxs可以实现更高效 更灵活的数
  • Games101,Lecture 13(光线与物体求交,引入包围盒)

    光线追踪 光线追踪更多的用于离线应用 因为一帧一般需要一万个CPU小时 原理 由摄像机发出感应光线 判断与物体相交的点是否可以与 光源连线 无遮挡物 如何判断光线与物体有交点 是管线追踪中较难的部分 光线与物体求交 1 与隐式表示的曲面求交