边界量(BV)和空间分区(SP)(轴对准边界框AABB,定向边界框OBB)

边界量(BV)和空间分区(SP)(轴对准边界框AABB,定向边界框OBB)

1.初始射线方向
•定义了相机和视图平面的位置
View Plane沿N的距离d
•每个屏幕像素都追踪射线
使用相机和(x,y)屏幕位置计算的射线启动位置和方向

2.表现射线
• P(t) = R0 + t * Rd = origin + t * direction
•给定两个点(x1,y1,z1)和(x2,y2,z2),分别是射线原点和“某个点”:
x = x1 + (x2-x1)t = x1 + it
y = y1 + (y2-y1)t = y1 + jt
z = z1 + (z2-z1)t = z1 + kt
where (i,j,k) is the direction

3.射线/球体交叉点
•使用两个点(x1,y1,z1)和(x2,y2,z2)给定射线(线)方程式
•带中心(L,M,N)的球体,半径为R:(X-L)^2 +(Y-M)^2 +(Z-N)^2 = R ^2
•将线方程替换为球方程,并求解根部,选择最接近根部

•替换在t中给出了二次:at2 + bt + c = 0
where
a = i2 + j2 + k2
b = 2i(x1-l) + 2j(y1-m) + 2k(z1-n)
c = l ^2 + m ^2 + n ^2 + x1 ^2 + y1 ^2 + z1 ^2 + 2(-lx1-my1-nz1) – r ^2
t = (-b ± sqrt(b^2-4ac)) / 2a

  • 如果b^2-4ac是 <0 然后没有交叉点,因为没有真正的解决方案
    = 0 然后排名掠夺球
    >0 然后根部给出前后的交叉点。

如果b^2-4ac> 0,则将根替换为线方程,以给出相交点的(x,y,z); 并在最小 +ve t处使用交点;
由于它是一个球体,因此相交点(xi,yi,zi)的正常是由:
N = ((xi-l)/r, (yi-m)/r, (zi-n)/r)

3.1几何方法:
Ray: P = P0 +tV
Sphere: |P-O|^2 - r^2 = 0
L= O - P0
t ca = LV
d^2 = L
L -t ca ^2

4.射线/平面交叉点
•平面方程式:
ax + by + cz + d = 0
•将线方程替换为平面方程以给出交点:
t = -(Ax1 + By1 + Cz1 + D) / (Ai + Bj + Ck)
•if(ai + bj + ck)= 0,则线和平面是平行的,没有发生交集
•如果(t <0),则在射线的起点后面

5.射线/多边形交叉点
•找到多边形的平面方程 - 需要3个非核线点
•A,B,C是多边形正常向量NP的组件,D是通过将任何顶点替换为(AX+by+Cz+d = 0)来计算的。
•检查射线/平面相交
•检查相交点是否在多边形
•使用Barycentric坐标

5.1重心坐标(Barycentric Coordinates):
给定三角形的三点坐标A, B, C,该平面内一点(x,y)可以写成这三点坐标的线性组合形式,
即 ( x , y ) = α A + β B + γ C 且满足 α + β + γ = 1 ( 0 ≤ α ≤ 1,0 ≤ β ≤ 1,0 ≤ γ ≤ 1)
则称此时3个坐标A,B,C的权重α , β , γ为点( x , y )的重心坐标。

5.2计算正态
•可以使用多边形正态的线性组合来计算相交点的正常
使用Barycentric坐标
•对射线/多边形测试的评论:
昂贵的过程,因为必须在多边形网格中永久重复多边形

6.射线/盒子交叉口
•对于定义盒子的每对平面,找到Tnear和Tfar交叉点
•测试:如果Tnear的较大值> Tfar的较小值,则没有与盒子的交点

7.加速技术
•每个对象的每个多边形的交叉测试都是不切实际的
•一个1000x1000的场景图像,其中包含100个对象的1000个多边形中的每个物体需要1000亿个交叉点计算,才能第一次命中射线跟踪
•反射射线,折射光线和阴影射线将呈指数增加
•(Whitted,80)估计渲染时间的75%至95%是交叉计算
•我们不能剔除或剪辑(我们可以使用栅格化)
•视觉对象部分可能反映在可见对象部分中
•我们必须使用一系列或多种加速技术

简单,有限的技术包括:
•首先命中速度:
使用Z-Buffer确定最接近像素的对象
射线迹象穿过每个像素,并立即与已知的最接近对象,然后继续射线跟踪如正常
•自适应树深度控制
•屏幕扩展

大多数使用的方法:
•边界卷的边界量和层次结构
•空间分区方法

8.自适应树深度控制
•随着我们继续沿射线树,多次互动变得微不足道
•当反射和传输衰减因子的产物小于阈值时,终止递归

9.屏幕范围
•将每个对象投影到屏幕空间,仅在投影范围内将射线跟踪区域

10.边界卷
•将每个对象包装在边界卷中,例如 领域
•仅在射线相交边界卷时测试对象: 一个球测试与1000多边形测试射线
•效率取决于对象拟合到边界量的空间的效果,例如 (包含对象体积) /(边界形状体积)

10.1不同的边界卷
•球:保持与物体移动和旋转相同
•轴对准边界框(AABB):
框与坐标系保持一致;框变化大小以包含对象旋转
•定向边界框(OBB):
盒子移动和旋转用对象

10.2比较边界量
•比较适合与交叉速度的紧密度
例如考虑酒杯和杆:
•合适的紧密度:OBB最好; bounding spheres < AABBs < OBBs
•交叉速度:bounding spheres最佳; OBBs < AABBs < bounding spheres
• 其他事宜:
随着对象的移动而更新
可以组合不同的边界量(工会和交叉点),以更好地拟合额外的复杂性

10.3边界卷的层次结构
•边界卷的界簇形成层次结构:
可能使用不同的边界量不同的集群级别
•在测试包含对象之前针对连续的树级测试
•可以进行大量劳动设置,并且可能需要在动画期间进行更新,例如 物体移动或分解等。

11.空间分区
•按物体占用标签世界空间
•我们没有对所有对象进行测试射线,而是问:“射线通过任何物体所占据的区域是吗? 如果是这样,哪个
目的?”
•目标:使渲染时间恒定,消除对场景的依赖
复杂
•共同替代方案:
•常规网格
•Octree
•二进制空间分区(BSP)树

11.1统一细分
•3D空间分为体素 - 需要确定体素的大小
•易于从细胞到单元

11.2 Octree
•将3D空间(是立方体)分为8个立方体
•如果需要,将一个立方体分成8个较小的立方体等等
•从细胞到细胞更难以一步措施达到

11.3 BSP树
•使用飞机将3D空间分为两个部分
•如果需要,将零件分为两个部分,依此类推
•分区平面可以在一般方案中以任何角度处于角度
•问题:找到良好的空间分区

12.边界量(BV)和空间分区(SP)
BV好处:
•保存交叉测试
•随着对象的移动,易于更新单边界量
BV缺点:
•可能难以有效地绑定对象
•需要在对象移动时更新边界卷层次结构

SP好处:
•保存交叉测试
•消除对场景复杂性的依赖
SP缺点:
•潜在的二级数据结构可能很大
•需要随着对象移动而更新数据结构

你可能感兴趣的:(3D,uv,算法,视觉检测,图像处理,数据分析)