遮挡算法在CAD和游戏行业是必需的。我认为这两个行业的情况是不同的。我的问题是:

  1. 这两个行业分别应用了什么样的遮挡算法?
  2. 有什么区别?

我正在从事CAD软件开发,我们采用的遮挡算法是-将对象标识符设置为其颜色(整数),然后渲染场景,最后读取像素以找出可见对象。性能不太好,所以我想在这里得到一些好的想法。谢谢。


阅读完答案后,我想澄清一下 遮挡算法 这里的意思是“遮挡剔除”——在将可见表面或实体发送到管道之前找出它们。

通过谷歌,我找到了一个算法 伽玛经. 。还有其他好的想法或发现吗?谢谢。

有帮助吗?

解决方案

让我困惑的是,到目前为止,大多数答案只讨论图像顺序遮挡。我对 CAD 不太确定,但在游戏中,遮挡从更高的级别开始,使用 BSP 树、八进制树和/或门户渲染来快速确定出现在视锥体内的对象。

其他提示

在游戏中,遮挡是使用两个 3D 库之一在幕后完成的:DirectX 或 OpenGL。为了了解细节,遮挡是使用 Z缓冲区. 。每个点都有一个 Z 分量,较近的点会遮挡较远的点。

遮挡算法通常由实现 DirectX 或 OpenGL 功能的专用 3D 图形处理芯片在硬件中完成。使用 DirectX 或 OpenGL 的游戏程序将在 3D 空间中绘制对象,并让 OpenGL/DirectX 库在考虑投影和遮挡的情况下渲染场景。

您应该搜索的词是 隐藏表面去除.

实时渲染通常利用一种简单的隐藏表面去除方法:背面剔除。每个多边形都有一个“表面法线”点,该点是在距表面设定距离处预先计算的。通过检查表面法线相对于相机的角度,您会知道表面背向,因此不需要渲染。

这里有一些互动 基于 Flash 的演示和解释.

硬件像素 Z 缓冲是迄今为止最简单的技术,但是在高密度对象场景中,您仍然可以尝试多次渲染同一像素,这在某些情况下可能会成为性能问题。- 您当然需要确保您没有对数千个不可见的对象进行映射和纹理化。

我目前正在我的一个项目中思考这个问题,我发现这激发了一些想法:http://www.cs.tau.ac.il/~dcor/Graphics/adv-slides/short-image-based-culling.pdf

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top