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

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

光线的三点假设:

  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:
    在这里插入图片描述
    如果光线进入时间为负,离开时间为正,则说明光源在包围盒内
    那么有:
    在这里插入图片描述

相关文章:

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

光线的三点假设: 光线按直线传播光线之间不会发生碰撞光线会经过一系列折射反射进入摄像机 可以从摄像机发出光线,推出可逆的光路 上图中,透明球在与相机直连的线条处,需要将折射和反射的着色点结果相加,如果有光源直…...

三十六、数学知识——组合数(递推法 + 预处理法 + 卢卡斯定理 + 分解质因数求解组合数 + 卡特兰数)

组合数算法主要内容 一、基本思路1、组合数基本概念2、递推法——询问次数多 a b 值较小 模处理(%mod)3、预处理阶乘方法——询问次数较多 a b 值很大 模处理(%mod)4、卢卡斯定理——询问次数较少 (a b 值很大&am…...

LinuxC编程——高级文件操作

目录 一、查询文件信息1、stat2、stat fstat lstat区别 二、目录操作2.1 opendir2.2 readdir2.3 closedir例练习:实现ls操作 三、库3.1 库的定义3.2 库的分类3.2.1 静态库3.2.2 动态库 3.3 创建库3.3.1 静态库制作3.3.2 动态库制作 一、查询文件信息 1、stat int …...

【基础知识整理】图的基本概念 邻接矩阵 邻接表

一、图概述 定义: 图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的; 其中,点通常被成为"顶点(vertex)“,而点与点之间的连线则被成为"边或弧”(edege)。 通常记为,G(V,E)。 图是一种重要的…...

5.程序控制结构|Java学习笔记

文章目录 程序流程控制介绍顺序控制分支控制分支控制if elseswitch分支结构 循环控制for循环控制while循环控制do...while循环控制跳转控制语句breakcontinuereturn 程序流程控制介绍 顺序控制分支控制循环控制 顺序控制 程序从上到下逐行地执行,中间没有任何判断…...

【最优PID 整定】PID性能指标(ISE,IAE,ITSE和ITAE)优化、稳定性裕量(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Linux内核中断和Linux内核定时器

目录 Linux内核中断 Linux内核定时器 Linux内核中断 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) 功能:注册中断 参数: irq : 软中断号 gpio的软中断号 软中断号 gpio_to_i…...

OMG--IDL(Interface Definition Language)

OMG--IDL(Interface Definition Language) 1 概述2 内容缩写IDL 语法和语义概述词法约定ISO Latin-1的字母字符如下表十进制数字字符图形字符格式化字符Tokens注释标识符冲突规则转义标识符关键字IDL识别的其他字符字面量 预处理IDL 语法构建块核心数据类…...

英语学习:M开头

machine 机器 mad 发疯的,生气的 madam 女士,夫人 madame 夫人 magazine 杂志 magic 有魔力的 maid 女仆,侍女 mail 邮递 mailbox 邮箱 mainland 大陆 major 较大的,主要的 majority 大多数 male 雄的 man 人类 man…...

【计算机组成原理与体系结构】控制器

目录 一、CPU的功能与基本结构 二、指令周期的数据流 三、数据通路 四、硬布线控制器 五、微程序控制器 六、微指令 一、CPU的功能与基本结构 运算器基本结构 控制器基本结构 CPU的基本结构 二、指令周期的数据流 取址周期 间址周期 中断周期 指令周期流程 三、数据通路 …...

结构化命令

章节目录: 一、使用 if-then 语句二、if-then-else 语句三、嵌套 if 语句四、test 命令4.1 数值比较4.2 字符串比较4.3 文件比较 五、复合条件测试六、if-then 的高级特性6.1 使用单括号6.2 使用双括号6.3 使用双方括号 七、case 命令八、结束语 本章内容&#xff1…...

Java Web实训项目:西蒙购物网

文章目录 一、创建数据库和表1、创建数据库2、创建用户表3、创建类别表4、创建商品表5、创建订单表 二、创建Simonshop项目1、创建web项目2、修改Artifacts名称:simonshop3、重新部署项目4、编辑首页5、启动应用,查看效果 三、创建实体类1、用户实体类2、…...

ChatGPT Prompt 提示词设计技巧必知必会

本文内容整理自图灵社区直播《朱立成:ChatGPT Prompt提示词技巧必知必会》。 朱立成,图灵社区《ChatGPT即学即用》视频课程作者,软件工程师,对新事物充满好奇,关注ChatGPT应用。2001年毕业于浙江大学,从事软…...

尚硅谷-云尚办公-项目复盘

尚硅谷-云尚办公-项目复盘 资料地址本文介绍问题汇总问题1.knife4j无法下载 视频4问题2.dev等含义 视频5问题3.wrapper继承/实现图 视频8问题4.修改统一返回结果 视频11问题5.修改后新增也变修改 视频29问题6.redis中key值乱码 视频55-60问题7.RangeError: Maximum call stack …...

nacos升级到2.0.3(单机模式)

前提&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud AlibabaSpring CloudSpring BootNacos2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE2.0.3 一、pom.xml文件 <parent><groupId>org.springframework.boot&…...

Koa学习3:用户添加、错误处理

模型 在src目录下创建model目录&#xff0c;用来存放模型 创建用户模型 user.model.js 注意&#xff1a; UUID类型是无法自增的&#xff0c;将id设置为UUID类型时只需要为其指定默认值即可 // 数据类型 const { DataTypes } require(sequelize); // 导入已经连接了数据库…...

网络安全入门学习第十五课——PHP基础

文章目录 一、WEB技术1、什么是web2、B/S架构3、C/S架构 二、PHP概述1、PHP是什么2、PHP受欢迎的原因3、基于MVC模式的PHP框架4、常用编译工具5、PHP环境搭建6、开发工具 三、PHP基本语法格式1、标记2、输出语句3、注释4、标识符 四、数据与运算1、常量1.1、常量定义1.2、预定义…...

电子科技大学 数学专业-功不唐捐,玉汝于成

电子科技大学 数学专业 功不唐捐&#xff0c;玉汝于成 1.本科背景 本科是坐落于湖南湘潭的湖南科技大学&#xff0c;专业为网络工程专业&#xff0c;因热爱数学专业&#xff0c;所以决定跨考数学专业。 本科专业课平均成绩85&#xff0c;排名10/104。CET 4 474分&#xff0c;…...

Android10.0 iptables用IOemNetd实现删除子链功能的实现

1.前言 在10.0的系统rom定制化开发中,在system中netd网络这块的产品需要中,会要求设置屏蔽ip地址之内的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现删除创建子链的相关功能 2. iptables用IOemNetd实现删除创建子链功能的实现的核心类 syste…...

OpenGL光照之光照贴图

文章目录 漫反射贴图镜面光贴图放射光贴图代码 每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观&#xff0c;但是这仍不能对一个物体的视觉输出提供足够多的灵活性。 我们将整个物体的材质定义为一个…...

ACM模板里那些“神秘”文件都是干嘛的?从acmart.cls到.bst文件深度解析

ACM模板文件全解析&#xff1a;从acmart.cls到.bst文件的深度指南 当你第一次打开ACM官方LaTeX模板时&#xff0c;可能会被一堆扩展名奇怪的文件搞得一头雾水——.cls、.bst、.bbx、.cbx、.dbx&#xff0c;它们看起来像是某种神秘代码。这些文件实际上控制着你论文的每一个排版…...

如何用逆强化学习训练机器人?从Berkly摆盘子实验到实战配置

如何用逆强化学习训练机器人&#xff1f;从Berkeley摆盘子实验到实战配置 当机器人需要学习叠衣服、摆餐具或执行其他精细操作时&#xff0c;传统编程方法往往束手无策——我们很难用代码精确描述"盘子应该放在哪里才算正确"。这正是逆强化学习&#xff08;Inverse R…...

Java字符串字符编码实践:深入解析decrString方法

本文对java方法进行了深入分析decrstring&#xff0c;该方法根据字符串中字符的索引奇偶加减其asci/unicode值&#xff0c;实现了简单的字符串编码。本文详细阐述了其工作原理和代码实现情况&#xff0c;并通过具体示例显示了字符转换过程&#xff0c;并讨论了相关注意事项。理…...

Qwen-Image镜像详细步骤:RTX4090D上从实例启动到Qwen-VL首次推理仅需3分钟

Qwen-Image镜像详细步骤&#xff1a;RTX4090D上从实例启动到Qwen-VL首次推理仅需3分钟 1. 镜像概述与核心优势 Qwen-Image定制镜像是专为RTX 4090D显卡优化的多模态大模型推理环境&#xff0c;预装了完整的CUDA 12.4工具链和Qwen-VL视觉语言模型所需的所有依赖项。这个镜像最…...

嵌入式轻量级定时调度库TimedActions原理与实践

1. TimedActions 库概述TimedActions 是一个轻量级、无依赖的嵌入式定时动作调度库&#xff0c;专为资源受限的 MCU&#xff08;如 STM32F0/F1/L0/L1、nRF52、ESP32-C3、RP2040 等&#xff09;设计。其核心目标并非替代操作系统级定时器&#xff08;如 FreeRTOSxTimerCreate或 …...

PHP的for 和 foreach 的区别的庖丁解牛

"for 和 foreach 的区别”&#xff0c;常被误解为“只是写法不同”或“一个用于数字索引&#xff0c;一个用于关联数组”。 但本质上&#xff0c;它是两种完全不同的迭代哲学&#xff1a; for 是基于指针的机械遍历&#xff08;命令式&#xff09;&#xff0c;它关注“位置…...

手把手解决OpenWRT编译中的6大经典错误:从freadahead异常到mkfs.jffs2问题

OpenWRT编译实战&#xff1a;6大经典错误分析与解决方案精要 1. 编译环境准备与常见陷阱 在Ubuntu 22.04环境下编译OpenWRT时&#xff0c;系统工具链的版本兼容性是首要考虑因素。许多开发者容易忽视宿主环境与目标平台的差异&#xff0c;导致后续出现各种编译异常。以下是关键…...

基于LSDYNA模拟的SPH方法:双水射流与单水射流冲击混凝土视频录制对比分析

视频录制 基于lsdyna的双水射流和单水射流冲击混凝土对比(sph方法)&#xff08;开篇先甩个实际现象&#xff09;混凝土被高压水射流冲得稀碎这事儿&#xff0c;本质上就是个暴力美学现场。最近在LS-DYNA里用SPH方法折腾双水射流和单水射流的对比&#xff0c;发现这玩意儿比单纯…...

BM8563实时时钟芯片原理与嵌入式RTC驱动集成

1. BM8563实时时钟芯片技术解析与嵌入式集成实践BM8563是由NXP&#xff08;原Philips&#xff09;推出的低功耗CMOS实时时钟/日历&#xff08;RTC&#xff09;芯片&#xff0c;广泛应用于工业控制、智能电表、便携式医疗设备及物联网终端等对时间精度、功耗和可靠性有严苛要求的…...

Youtu-Parsing效果实测:多类型合同关键信息抽取准确率报告

Youtu-Parsing效果实测&#xff1a;多类型合同关键信息抽取准确率报告 每次处理合同&#xff0c;最头疼的就是从一堆密密麻麻的文字里&#xff0c;把关键信息一个个挑出来。甲方乙方是谁&#xff1f;金额是多少&#xff1f;日期是哪天&#xff1f;手动核对不仅费时费力&#x…...