7

遮挡算法在 CAD 和游戏行业是必不可少的。我认为它们在两个行业中是不同的。我的问题是:

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

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


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

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

4

4 回答 4

5

在游戏中,遮挡是在幕后使用两个 3D 库之一完成的:DirectX 或 OpenGL。具体来说,遮挡是使用Z 缓冲区完成的。每个点都有一个 Z 分量,距离较近的点会遮挡较远的点。

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

于 2009-03-27T15:30:54.690 回答
3

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

于 2009-03-27T17:38:06.210 回答
2

您应该搜索的术语是隐藏表面去除

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

这是一些基于 Flash 的交互式演示和说明

于 2009-03-27T15:40:09.380 回答
1

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

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

于 2009-03-27T15:52:50.257 回答