【问题标题】:Options for offscreen rendering on Android with OpenGL ES 1.0?使用 OpenGL ES 1.0 在 Android 上进行离屏渲染的选项?
【发布时间】:2011-02-10 09:00:43
【问题描述】:

我正在为我正在为 android 编写的 OpenGL 游戏实现拾取。它使用“唯一颜色”方法将每个可触摸对象绘制为每个对象唯一的纯色。然后,用户输入在触摸位置读取 glReadPixels()。我已经完成了着色工作,并且 glReadPixels 工作了,但是我无法将“颜色”渲染与主要的实际渲染分开,这使得 glReadPixels 的使用变得复杂。

据说处理这个问题的技巧是将第二个场景(用于输入)渲染到屏幕外缓冲区,但这似乎有点问题。我已经研究过使用 OpenGL ES1.1 FBO 作为屏幕外缓冲区,但我的手机(Samsung Galaxy S Vibrant (2.2))似乎不支持 FBO。我不知道如何在没有用户看到的情况下正确渲染这个场景(并在上面运行 glReadPixels)。

有什么想法可以完成这种离屏渲染吗?

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    如果不支持 FBO,您可以随时使用正常的后台缓冲区进行渲染。

    典型用法是:

    • 清除后台缓冲区
    • 绘制“color-as-id”对象
    • 清除后台缓冲区
    • 正常绘制
    • 交换缓冲区

    第二次清除将确保拣货代码不会出现在最终图像上。

    【讨论】:

    • 您还需要在绘制颜色 ID 对象之后但在读取帧缓冲区中的颜色之前执行 glFlush
    • @ryanm:你永远需要执行 glFlush。如果需要,glReadPixels 会进行刷新。
    • 文档没有提到它,但这是完全合理的行为,所以你可能是对的。每天都是上学日!这让我觉得这在质量差的 OpenGL 实现中很容易被忽视......
    猜你喜欢
    • 2011-06-09
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多