opengl es中的对象选择

时间:2013-07-06 20:08:20

标签: android opengl-es

我是3D编程的新手,现在已经玩了一段时间用于Android的OpenGL ES,我已经看到了这些问题的一些选项,这些问题都是关于光线跟踪/跟踪和对象拾取以及使用像素来实现的。选择3D对象。我正在尝试使用OpenGL ES for Android制作类似于绘图程序的东西,我可以从多维数据集中选择一行并删除它或删除或修改的对象。无论如何,我不确定从哪里开始学习这个我已经尝试了谷歌并没有找到任何有用的东西。也许如果有一个视频教程或网站更好地解释这个或任何帮助指出我的方向去将非常感激。非常感谢你的进步。

是的我知道这是一个可能重复的问题。

2 个答案:

答案 0 :(得分:0)

OpenGL ES不具备OpenGL的选择功能,因此您必须自己构建。

我建议从特定于Android的OpenGL ES示例程序开始。我认为这篇文章会有所帮助:

http://software.intel.com/en-us/articles/porting-opengl-games-to-android-on-intel-atom-processors-part-1

答案 1 :(得分:0)

我自己是iOS开发者,但我最近为我的游戏实施了光线投射,所以我将尝试以平台无关的方式回答这个问题。

光线投射操作有两个步骤:首先,您需要从用户的拍子中获取光线,其次,您需要测试定义交叉点模型的三角形。请注意,这要求您仍然将它们保存在内存中或能够恢复它们 - 您不能只是将它们保存在显卡的vbo中。

首先,转换为世界坐标。由于您毫无疑问使用投影矩阵来获得模型的三维透视图,因此您需要取消投影该点以将其置于世界坐标中。有许多已经实现的库,例如glut's glunproject,我认为可以在Android上使用。我相信在数学上这相当于取代目前作用于模型的所有变换。无论如何,有许多可在线公开的实现,您可以从中复制。

此时,您将需要一个Z坐标作为您尝试取消投影的点。你实际上想要取消投影两次,一次使用Z坐标为0,一次使用Z坐标为1.由z-Coord为0得到的矢量是光线的原点,并从z-中减去此向量1矢量坐标你将得到方向。现在,您已准备好测试模型多边形的交叉点。

我已经成功完成了本文中提出的方法(http://www.cs.virginia.edu/~gfx/Courses/2003/ImageSynthesis/papers/Acceleration/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf)来进行实际的交叉测试。该算法最后在C中实现,但您应该能够轻松地将其转换为Java。