使用Android OpenGL ES 1.1(HTC Desire)...
总体上,我遇到的问题是:
我在一个复杂的场景中渲染了各种3D对象。我想检查用户是否点击了特定的对象。这个对象可能被部分隐藏,因此在场景中它可能呈现出几乎任何形状。如果用户单击对象在场景中可见的部分,则只允许选择该对象。这意味着我不能使用基于向量的计算来进行对象相交,因为这些计算不能轻松地考虑到对象的隐藏区域。
所以我想到了一个主意...
我设置模板缓冲区,使得无论对象在哪里可见,模板缓冲区都被填充了1,而模板缓冲区中其他地方都是0。当用户在场景中单击特定像素时,我只需要检查模板缓冲区,看它是否包含1或0,这表明对象是否被单击。
这在PC上完美运行,但在Android OpenGL ES 1.1上,似乎我不能通过使用glReadPixels()从模板缓冲区中读取,因为GL_STENCIL_INDEX不受支持。
有人知道是否有一种方法可以从模板缓冲区中读取这个0/1吗?或者有人能想出更好的算法来确定我的对象是否已被单击?
非常感谢。
总体上,我遇到的问题是:
我在一个复杂的场景中渲染了各种3D对象。我想检查用户是否点击了特定的对象。这个对象可能被部分隐藏,因此在场景中它可能呈现出几乎任何形状。如果用户单击对象在场景中可见的部分,则只允许选择该对象。这意味着我不能使用基于向量的计算来进行对象相交,因为这些计算不能轻松地考虑到对象的隐藏区域。
所以我想到了一个主意...
我设置模板缓冲区,使得无论对象在哪里可见,模板缓冲区都被填充了1,而模板缓冲区中其他地方都是0。当用户在场景中单击特定像素时,我只需要检查模板缓冲区,看它是否包含1或0,这表明对象是否被单击。
这在PC上完美运行,但在Android OpenGL ES 1.1上,似乎我不能通过使用glReadPixels()从模板缓冲区中读取,因为GL_STENCIL_INDEX不受支持。
有人知道是否有一种方法可以从模板缓冲区中读取这个0/1吗?或者有人能想出更好的算法来确定我的对象是否已被单击?
非常感谢。