0

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

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

4

2 回答 2

0

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

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

首先,转换为世界坐标。由于您毫无疑问使用投影矩阵来获得模型的 3-D 透视图,因此您需要取消投影点以使其处于世界坐标中。已经实现了许多库,例如 glut 的 glunproject,我相信它可以在 Android 上使用。我相信从数学上讲,这相当于对当前作用于您的模型的所有转换进行逆运算。无论如何,您可以从中复制许多在线公开可用的实现。

此时,您将需要一个 Z 坐标来表示您尝试取消投影的点。您实际上想要取消投影两次,一次 Z 坐标为 0,一次 Z 坐标为 1。z 坐标为 0 的向量是射线的原点,并通过从您的 z- 中减去该向量1个向量的坐标,您将获得方向。现在您已准备好测试模型多边形的交叉点。

我已经使用本文中介绍的方法(http://www.cs.virginia.edu/~gfx/Courses/2003/ImageSynthesis/papers/Acceleration/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf)取得了成功实际相交测试。该算法最后在 C 中实现,但您应该能够毫不费力地将其转换为 Java。

于 2013-07-10T22:03:12.347 回答
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

于 2013-07-08T02:14:24.503 回答