2011-02-07 52 views
0

在我的Android应用程序中,我使用GLSurfaceView来绘制3D对象,就像一个盒子对象。我通过使用OpenGL ES API来翻译该对象。在动画过程中的某一时刻,对象将从可见视口窗口中消失。此时,我必须从正在绘制的其他对象的集合中删除此对象。我如何检测到对象已经离开视图?短码示例将不胜感激。如何检测对象是否已移出OpenGL ES中的可见窗口?

回答

1

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

两件事看出来:

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

你在找什么叫做viewing frustum culling

的视锥是体积可见 到所述虚拟相机的几何 表示。当然, 本卷以外的对象在最终图像中不会显示为 ,因此它们将被丢弃。通常情况下,物体位于观看平截头体的边界上。 这些对象沿着这个边界在 被称为剪裁的过程中被切割成片段 ,并且 位于截锥体之外的片断被丢弃 ,因为没有地方绘制它们。

发表了几篇教程:

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

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

+0

我正在寻找OpenGL ES Api,就像给定一个对象几何体一样,它会测试该对象是否在视口窗口之外,然后返回测试结果。 – ace 2011-02-07 18:54:46

+1

在OpenGL ES中没有API。正如我在上面指出的那样,您需要实施平截头体剔除。 – 2011-02-07 19:29:36

相关问题