【问题标题】:How to implement color picking on a cube in Android OpenGL ES如何在 Android OpenGL ES 中实现立方体上的颜色拾取
【发布时间】:2012-02-18 16:06:50
【问题描述】:

我已经在 Android OpenGL ES 中实现了一个可以通过手势旋转的立方体。现在我想实现,当我单击立方体上的某个位置时,它可以判断出哪张脸被触摸并做出一些响应。

我在网上搜索了一个很好的颜色选择方法,这里有一些教程:http://www.lighthouse3d.com/opengl/picking/index.php?color1

但我仍然觉得这对我来说很困难。

如何为每张脸分配不同的颜色?

如何从后台缓冲区读取鼠标点击的像素?

谁能告诉我更多细节?非常感谢!

如果您不介意,请给我一个电子邮件地址,我可以将我所做的工作发送给您。谢谢:)

【问题讨论】:

    标签: android opengl-es cube color-picker


    【解决方案1】:

    第一条评论是,通过分析来执行此操作几乎总是更快 - 通过向世界投射光线。抛开那条评论...

    您可以像任何其他类型的渲染一样为每个面分配不同的颜色以进行拾取,无论是通过更改您传递给glColorPointer(如果使用ES 1)的内容还是通过切换到单个像素、单色纹理或通过任何其他方式。如果您启用了照明,请务必将其禁用。

    您可以使用glReadPixels 从帧缓冲区中读取颜色。在触摸屏设备上,您可能想要抓取一个 20x20 像素的区域,然后选择其中最常出现的颜色,或者类似的东西,因为手指不是很精确。

    【讨论】:

    • 我还有一些问题。在渲染颜色时,为什么我需要禁用照明?在颜色拾取中,您提到手指拾取不是很精确,是否意味着在 glReadPixels 方法中我需要将拾取范围指定为 20*20 甚至更大?谢谢! :-) @Tommy
    • 如果您保持照明打开,那么它可能会改变您正在渲染的颜色(例如,因为它们在黑暗中)。这个想法是你读回颜色 (0, 0, 128) 并立即知道你已经点击了对象 128,但是如果昏暗的灯光将它减少到,比如说,(0, 0, 64) 那么你'会认为一个完全不同的对象被窃听了。我绝对建议您向glReadPixels 询问 20x20 或更大的区域(Apple 总是说 40px 应该是他们旧款 320x480 设备上的最小值,但显然您的像素密度可能会有所不同)并运行。
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多