Rob*_*ias 5 opengl linear-algebra
我正在编写一个opengl应用程序,它使用基于深度排序的透明度/半透明算法.
我的第一种方法计算所有物体的相机的边界框中心距离,但我意识到一个边界框可以最接近相机而不是其他,但它的中心距离最远.
盒子的方向可以不同,因此轴不对齐.

如何正确计算到相机的边界框距离?
由于欧几里德距离函数的性质,计算每个 OBB(定向边界框)从camera到的距离centre涉及到性能需求;sqrt此外,您还需要距离相机最近的盒子,通过测量到中心的距离来解决问题没有什么意义。
如果您知道相机空间中盒子的顶点,则按 Z 对它们进行排序将为您提供最接近的顶点。包含该点的框将是距离相机最近的框。然而,由于 OBB 通常按其中心、方向和范围存储,因此不容易在相机空间中获得顶点;因此,对于所有盒子的所有顶点,通常需要将盒子的顶点从盒子空间变换到相机空间;这会是昂贵的,如果在 GPU 上执行,也许还可以。
这是我能想到的替代方案,可能比排序更快但不太准确,是对这些框(使用 和ray.origin = camera)执行快速光线-obb 相交测试ray.direction = obb.centre - camera。每个测试都会返回一个t沿着矢量的距离,该距离发生在该框上;缩放ray并t仅取其 Z 分量本质上会给出向量在 Z 轴上的投影(这将是光线击中盒子的点的 Z 坐标);Z 分量最小的盒子将是沿 Z 方向距离相机最近的盒子。
该页面既有ray-obb测试的算法,也有实现;它使用实时渲染中描述的 Kay-Kajiya 的板方法。
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |