Android 使用OpenGL ES 2.0进行坐标拾取

Android 使用OpenGL ES 2.0进行坐标拾取,android,opengl-es,glsles,Android,Opengl Es,Glsles,我尝试用OpenGL ES 2.0实现坐标拾取功能。 我无法实现我在桌面版本中实现的两个版本 版本1是以唯一的颜色渲染每个三角形,该颜色表示三角形的索引,而不是使用光线投射计算坐标。此版本不起作用,因为在OpenGL ES GLSL版本1.0中没有变量GL_原语ID,也不可能进行逐位移位 版本2将坐标渲染为浮点纹理的值,但浮点纹理在OpenGL ES 2.0中不可用 有人知道我能实施什么吗?我不想对每个三角形进行光线投射,因为它的性能不太好 谢谢你的帮助和任何想法 实现坐标拾取的另一种方法是对象

我尝试用OpenGL ES 2.0实现坐标拾取功能。 我无法实现我在桌面版本中实现的两个版本

版本1是以唯一的颜色渲染每个三角形,该颜色表示三角形的索引,而不是使用光线投射计算坐标。此版本不起作用,因为在OpenGL ES GLSL版本1.0中没有变量GL_原语ID,也不可能进行逐位移位

版本2将坐标渲染为浮点纹理的值,但浮点纹理在OpenGL ES 2.0中不可用

有人知道我能实施什么吗?我不想对每个三角形进行光线投射,因为它的性能不太好


谢谢你的帮助和任何想法

实现坐标拾取的另一种方法是对象的光线拾取。它被认为是从二维屏幕坐标中拾取三维对象的最佳方法。您不必使用对象的唯一颜色渲染场景,也不必拾取颜色来确定交点

在本教程的帮助下,我实现了三维对象的拾取:


在对算法进行了一些优化之后(我在博客中发表了评论),在我的例子中,性能不是问题。为了测试性能,我选择了一个包含3000多个三角形的3D模型,速度很快。在实际情况下,对于碰撞检测,您可以使用具有非常简化的几何体的模型。

在使用光线投射时,根据光线测试每个基本体是一个坏主意。您应该构建模型的层次表示,如边界体积树,并执行加速光线投射测试。当然,每次模型更改时都必须更新此树


回到为每个三角形渲染单独颜色的原始方法,似乎需要分配另一个顶点属性(颜色/索引),并且必须为每个三角形重复共享顶点。顶点数将是三角形数的3倍,但这将解决您的问题。

我知道本教程,我认为光线拾取不够快。我有300.000-1.000.000个三角形的模型,我需要三角形上的坐标。简单的物体拾取不是问题,但是我有一个巨大的模型,光线拾取我必须检查每个三角形,这真的很慢。我的目标是在曲面上移动一个对象。但正如我所说的,对于对象拾取,可以使用带有简化几何体的模型。当然,如果您真的需要像素完美和精确的拾取,那么您可以使用100万个三角形而不是简化网格来拾取对象。