【OptiX】第2个示例 添加实时计算几何体以及计算法线等属性
【简介与代码下载】
在上一节中我们添加了一个三角网,碰撞是OptiX自动计算的。此时只需要根据碰撞点计算属性就可以了。本文介绍另一种添加方法,也即在shader中实时计算交点形状确定几何体的形状。本文添加一个球,并实时计算交点,在交点处计算法线属性。
链接:https://pan.baidu.com/s/1J4ojihgazzbumETi0nEa6A
提取码:zd7h
下载解压后,请使用VS2015打开工程,并把当前配置调整为Debug和x64。另需要在默认路径安装OptiX6.0与CUDA10.0,可以参考我的这篇博文:【Optix】Optix介绍与示例编译
下面是运行结果,可以使用鼠标左键进行拖拽和右键进行拉近拉远。
【光线与球的求交】
光与球的求交在sphere.cu中进行计算,这里要特别解释一下其中的关键函数,通过主程序的如下语句我们设置了sphere.cu的光线求交启动函数为intersect_compute,包围盒计算程度为bounds,注意包围盒会先于光线求交调用,因为计算完包围盒才能确定其在场景加速结构中的顺序。并设置球的变量sphere的中心点为(-1.5, 1.0, 0.0)半径存放在第四个分量中为1.0。
const char* ptxSphere = getPtxString("sphere.cu");sphere->setBoundingBoxProgram(context->createProgramFromPTXString(ptxSphere, "bounds"));sphere->setIntersectionProgram(context->createProgramFromPTXString(ptxSphere, "intersect_compute"));sphere["sphere"]->setFloat(-1.5f, 1.0f, 0.0f, 1.0f);//
那么光线我们已知Ray, 起点是origin,方向是direction,其光线方程是p=Ray.origin + t * Ray.direction。 p是光线上的点,t是参数。那么球的方程也有多种形式,此时我们使用其中一种形式对于球上的每一点p(x, y, z),则有:
其中r是球的半径。首先来看代码,然后对照代码再看图解:
float iSphere(float3 ro, float3 rd)
{float3 oc = ro - make_float3(sphere);//ro-centerfloat b = dot(oc, rd);float c = dot(oc, oc) - sphere.w * sphere.w; //dot(oc,oc)-r*rfloat h = b*b - c; if (h < 0.0)return -1.0;float t = (-b - sqrt(h)); return t;
}
那么我们来做一张图来说明球与直线碰撞方程的求解,首先来看一个根的情况。
然后看没有根的情况:
双根的情况:
关于双根为什么是-b-sqrt(h),则可以做辅助e和f,f*f =dot(oc,oc)-b*b, e*e=r*r - f*f = r*r-dot(oc,oc)+b*b=b*b-c =h
则根为-b-sqrt(h)与-b+sqrt(h)。
【求法线】
求法线就简单了,直接先求交点,拿交点减去球心:
geometric_normal = normalize(ray.origin + t*ray.direction - make_float3(sphere));
【OptiX】第2个示例 添加实时计算几何体以及计算法线等属性相关推荐
- 《机械师实时调度示例(I) - 实时规划》的视频翻译
之前翻译了红帽2019年技术峰会上,OptaPlanner演示实时调度的一个案例中的文章.其中关于案例的讲解,最近有时间将它翻译一下,大家可以结合视频来细看该文章. <机械师实时调度示例(I) ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...
- 【数据挖掘】卷积神经网络 ( 视觉原理 | CNN 模仿视觉 | 卷积神经网络简介 | 卷积神经网络组成 | 整体工作流程 | 卷积计算图示 | 卷积计算简介 | 卷积计算示例 | 卷积计算参数 )
文章目录 I . 人类的视觉原理 II . 卷积神经网络 模仿 视觉原理 III . 卷积神经网络简介 IV . 卷积神经网络 组成 V . 卷积神经网络 工作流程 VI . 降低样本参数数量级 VI ...
- boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET
boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET boost::crc_32_type crc32; crc32.process_by ...
- 流式计算、实时计算和离线计算
流式计算和批处理计算 实时计算和离线计算 以水为例,Hadoop可以看作是纯净水,一桶桶地搬:而Storm是用水管,预先接好(Topology),然后打开水龙头,水就源源不断地流出来了. 1.流式计算 ...
- 为potplayer播放器添加实时中文字幕
为potplayer播放器添加实时中文字幕 大家好,现在的国外视频引进至国内后,也不再去进行中文配音了,而是直接出中文字幕.而那些不是通过正规途径进入中国的电影.视频,只有英文或者韩文或者其他国家的字 ...
- ios pusher使用_如何使用Pusher向Laravel添加实时通知
ios pusher使用 现代网络用户希望了解应用程序内发生的所有事情. 您不希望成为一个没有通知下拉列表的网站,不仅在所有社交媒体网站中找到,而且在如今的所有其他地方也都找不到. 幸运的是,使用La ...
- 数据透视表(图)中添加公式计算与汇总--计算项和计算字段
↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 问题 最近有一个同学咨询了一个Excel问题如下: 原始数据如下表: 品牌 时间 产品数量 次品数量 A 2020/1/1 35 ...
最新文章
- 2015年的计算机二级考试题,2015年计算机二级考试《VFP》精选上机练习题
- MySQL复制的奇怪问题
- CSDN博客文章阅读模式插件(附源码)
- codeforces1496 D. Let‘s Go Hiking(乱搞+讨论)
- (JAVA)多线程之wait()与notify()
- 解决dataTable 报错:cannot read property “style“ of undefined
- 尽量少一点甲方思维,也尽量少一点弱势方思维
- mysql in 按顺序排序_Mysql查询结果顺序按in()中ID的顺序排列的实例分析
- SSM : 环境搭建
- ServiceLoader用法demo
- NUC1445 Euclid's Game【博弈】
- 服务器共享文件有访问台数限制,Win7/xp系统下共享文件夹最大连接数限制怎么解除...
- 单机类似节奏大师游戏源码项目
- DV、OV、EV :SSL证书那么多,我该选择哪一种?
- scratch 游戏 打鬼游戏 教案
- 每天一kernel:正太概率图
- 泰坦尼克号预测python_泰坦尼克号生存预测(python)
- linux命名空间(namespace)学习(一)
- 运筹帷幄之中决胜千里之外 菜鸟初识代码编程规范二 命名规范
- 安装MS15-034漏洞补丁KB3042553失败
热门文章
- uva 11825 - Hackers' Crackdown dp
- 『天涯杂谈』 崖叔整容借鉴(给崖叔交作业啦)——对比人人 开心 猫扑 豆瓣 西祠 宽带山
- 提前完成的梦想,看我怎么做的
- ps常用的扣图工具有哪些,都有哪些方法
- 橄榄油的美容方法,橄榄油的正确用法
- 设有关系模式R(A,B,C,D),F是R上成立的FD集,F={D→A,D→B},试写出关系模式R的候选健
- Windows下的影子账户创建与防范
- 【Access数据库】关于带参数的交叉表查询
- 论多窗口相互关联下window.open打开已在的窗口时只激活不刷新的实现方案
- java设置文本框里字体颜色_swing设置字体颜色