如何检查在openGL-ES中绘制的对象是否可见?
答案 0 :(得分:5)
如果对象可见,则不检查 IN OpenGL。
您必须拥有自己的可见性/剔除算法才能执行此操作。这意味着BSP树,门户,八叉树等。根据世界的复杂程度,您可以根据网格或其他内容进行空间分区。这实际上取决于你在做什么。
请记住,OpenGL只知道Draw和Cull。
您可以对您世界中的所有对象进行循环,并告诉GL逐个绘制它们。如果不在视野中,每一个都将被处理并丢弃。当然这是蛮力而且缓慢。
因此需要更广泛的剔除算法。
为什么你认为图形引擎有这么多百万行? :d
答案 1 :(得分:1)
您可以使用picking的变体。 OpenGL选择的想法是渲染视图的一小部分区域,随时移动堆栈中的名称(这样您就可以引用正在渲染的内容)。 OpenGL将返回一个命中记录,以便您知道已呈现的内容。它通常用于找出鼠标下的内容。
所以你要做以下事情:
设置一个小的可渲染表面(只是为了进行可见性检查)
将场景渲染到这个可渲染曲面上(用简单的东西替换模型,例如边界框;注意你不需要渲染实际的三角形,你可以只渲染线条或点)
< / LI>我还没有尝试过,但我认为它会起作用;也许不是很快,但可靠。虽然编写有效的可见性/剔除算法很困难,但通常会使用自定义可见性/剔除算法。