在3D空间中的三角形上反映射线
Reflecting ray on triangle in 3D space
我在3D空间中工作。我有一个射线,或更具体地说是3D空间中射线的启动和传输向量。我也有一个三角形,我知道这是一个事实被射线击中。当然,由三角i表示我有3个3D点。我还可以轻松地从这个三角形计算一个普通向量。
现在我需要获得一条新射线,这将是该特定命中后的反射。
我也不知道在三角形上的接触点在哪里,但显然必须考虑到它才能获得反射的射线。这一点将是那个新射线的开始。
这是在2D中做的微不足道,但我不知道如何在3D中做到这一点。
我正在使用ofxray附加组件使用C 和OpenFrameWorks。
此问题将两个问题分解为两个问题:找到射线符合三角形的点 - 这是反射射线的起源点 - 并找到的方向(向量(反射的射线。
让三角形的正常向量为 n 。描述三角形平面的方程为
nx = k
您可以通过将其中一个三角顶点插入该方程来确定K。事件射线的方程为
X = t V P
其中 p 是射线的原点, v 是其(归一化(方向。要找到射线的交点点,只需求解这对方程,这归结为解决
n (T V P (= K
对于t,然后将其插入射线的方程式中。
要找到反射射线的方向,我们必须逆转与三角形的正常平行的入射射线的分量:
V r = v 2( VN (P>
(注意标志 - 我假设正常人从射线击中的脸上指出。(
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- 在c++中访问int到类对象的映射时出错
- 在C++中搜索嵌套多映射值
- 错误处理.将系统错误代码映射到泛型
- 将张量的"lower diagonal"映射到矩阵,作为将矩阵的下三角形部分提取到向量的推广
- 如何在三角形曲面细分评估着色器中插值 UV 映射坐标?
- 尝试将纹理映射到 GLSL 中的三角形时出现访问冲突
- OpenGL 3.3纹理映射三角形