检查对象是否可见

时间:2010-08-05 09:13:23

标签: opengl-es

如何检查在openGL-ES中绘制的对象是否可见?

2 个答案:

答案 0 :(得分:5)

如果对象可见,则不检查 IN OpenGL。

您必须拥有自己的可见性/剔除算法才能执行此操作。这意味着BSP树,门户,八叉树等。根据世界的复杂程度,您可以根据网格或其他内容进行空间分区。这实际上取决于你在做什么。

请记住,OpenGL只知道Draw和Cull。

您可以对您世界中的所有对象进行循环,并告诉GL逐个绘制它们。如果不在视野中,每一个都将被处理并丢弃。当然这是蛮力而且缓慢。

因此需要更广泛的剔除算法。

为什么你认为图形引擎有这么多百万行? :d

答案 1 :(得分:1)

您可以使用picking的变体。 OpenGL选择的想法是渲染视图的一小部分区域,随时移动堆栈中的名称(这样您就可以引用正在渲染的内容)。 OpenGL将返回一个命中记录,以便您知道已呈现的内容。它通常用于找出鼠标下的内容。

所以你要做以下事情:

  • 设置一个小的可渲染表面(只是为了进行可见性检查)

  • 将场景渲染到这个可渲染曲面上(用简单的东西替换模型,例如边界框;注意你不需要渲染实际的三角形,你可以只渲染线条或点)

    < / LI>
  • 检查点击记录以查看已呈现的内容。

我还没有尝试过,但我认为它会起作用;也许不是很快,但可靠。虽然编写有效的可见性/剔除算法很困难,但通常会使用自定义可见性/剔除算法。