遮挡算法在CAD和游戏行业中是必需的。在我认为的两个行业中他们是不同的。我的问题是:
我正在开发CAD软件开发,我们采用的遮挡算法是 - 将对象标识符设置为其颜色(整数),然后渲染场景,最后读取像素以找出可见对象。表现不太好,所以我想在这里得到一些好主意。感谢。
在阅读了anwsers之后,我想澄清一下遮挡算法在这里意味着“遮挡剔除” - 在将它们发送到管道之前找出可见的表面或实体。
使用谷歌,我在gamasutra找到了一个算法。还有其他好的想法或发现吗?感谢。
答案 0 :(得分:5)
在游戏中,使用两个3D库之一在场景后完成遮挡:DirectX或OpenGL。为了详细说明,使用Z buffer进行遮挡。每个点都有一个Z分量,这些点更接近于远离的点。
遮挡算法通常由硬件通过专用的3D图形处理芯片完成,该芯片实现DirectX或OpenGL功能。使用DirectX或OpenGL的游戏程序将在3D空间中绘制对象,并让OpenGL / DirectX库渲染场景,同时考虑投影和遮挡。
答案 1 :(得分:3)
到目前为止,大多数答案只讨论图像顺序遮挡,这让我感到困惑。 我不完全确定CAD,但是在游戏中,遮挡从更高的层次开始,使用BSP树,oct树和/或门户渲染来快速确定出现在视锥体内的对象。
答案 2 :(得分:2)
您应搜索的字词为hidden surface removal。
实时渲染通常利用隐藏表面移除的一种简单方法:背面剔除。每个多边形将具有“表面法线”点,该点在距离表面的设定距离处预先计算。通过检查相对于相机的曲面法线角度,您可以知道曲面正面朝外,因此无需渲染。
答案 3 :(得分:1)
硬件像素Z-Buffering是迄今为止最简单的技术,但是在高密度对象场景中,您仍然可以尝试多次渲染相同的像素,这在某些情况下可能会成为性能问题。 - 你当然需要确保你没有映射和纹理化数千个不可见的对象。
我正在考虑我的一个项目中的这个问题,我发现这刺激了一些想法: http://www.cs.tau.ac.il/~dcor/Graphics/adv-slides/short-image-based-culling.pdf