如何检测对象是否已移出OpenGL ES中的可见窗口?

时间:2011-02-07 17:19:27

标签: android opengl-es

在我的Android应用程序中,我使用GLSurfaceView来绘制像对象一样的3d对象。我通过使用OpenGL ES apis进行翻译来为该对象设置动画。在动画期间的某个时刻,对象将离开可见视口窗口。此时,我必须从正在绘制的其他对象的集合中删除此对象。如何检测到对象已离开视图?短代码示例将不胜感激。

2 个答案:

答案 0 :(得分:1)

您所看到的内容称为viewing frustum culling

  

视锥体是几何的   可见的体积表示   到虚拟相机。自然,   此卷外的对象不会   在最终图像中可见,所以他们   被丢弃了。通常,物体躺在上面   视锥体的边界。   这些物体被切成碎片   在这个过程中沿着这个边界   称为剪裁,以及那些碎片   在平截头体之外的谎言被丢弃   因为没有地方可以画它们。

关于该主题的几个教程:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html

答案 1 :(得分:1)

Here is a frustum class for androidhere代码的一个端口。它允许您从OpenGL中提取平截头体参数,然后测试各种几何图元(点,球体,轴对齐的长方体)以包含在视图体积中。

需要注意两件事:

  1. update()方法中应该是冗余的错误处理代码。有关此问题,请参阅here。看起来像是一个heisenbug。
  2. extractFromOGL()使用glGetFloat - PixelFlinger软件渲染器中未实现此方法。如果您要定位真正的低端设备或使用模拟器,则必须自己计算投影和模型视图矩阵并手动调用update()。