7

我需要帮助在 iPhone 上使用 OpenGL ES 2.0 设置多通道渲染。我还没有找到一个实现纹理渲染和多通道着色的示例。

我正在寻找一些实现的说明和示例代码:

  • 第一阶段:渲染到纹理
  • 第二阶段:输入纹理并渲染到屏幕

我参考了 Apple 的OpenGL ES Programming Guide、OpenGL Shading Language (Orange Book) 和 O'Reilly 的 iPhone 3D Programming Book。

橙皮书讨论了延迟着色,并为第一遍和第二遍渲染提供了两个着色器程序,但没有提供示例代码来设置该应用程序或展示如何在两个着色器之间传递数据。

问题:

  • 如何渲染到纹理?
    • 使用 glDrawElements
    • 如何将该纹理输入到下一个通道?
  • 如何实现两个着色程序?
  • 如何交替使用第一遍和第二遍着色程序?
    • 需要为每个通道附加、分离和调用“使用”?
  • 如何实现多通道着色?
4

2 回答 2

4

几周前,我写了一个这样做的简短示例(使用 OpenGL ES 2.0 在 iPhone 上多次渲染到纹理传递):http: //www.mat.ucsb.edu/a.forbes/blog/?p =245

**

编辑,这篇文章有点老了,它已经移到这里了:http: //blog.angusforbes.com/openglglsl-render-to-texture/

**

于 2011-07-12T06:49:00.403 回答
3

好的,首先:我不是 OpenGL ES 2.0 方面的专家。在我的第一个 OpenGL ES 应用程序之一中,我有点想进行多通道渲染设置。

我也用过橙皮书。检查第12 章。帧缓冲区对象 > 示例。第一个示例演示了如何使用帧缓冲区渲染到纹理,然后将该纹理绘制到屏幕上。

基本上使用该示例,我创建了一个应用程序,该应用程序使用效果着色器将一些几何图形渲染到纹理,然后将该纹理渲染到屏幕,与其他一些内容分层,全部使用不同的着色器。

我不确定这是否是最好的方法,但它适用于我的目的。我的设置:

  • 我创建了两个帧缓冲区,默认的和屏幕外的。渲染缓冲区相同
  • 我创建了应用程序将渲染到的纹理
  • 我绑定屏幕外帧缓冲区,并使用 glFramebufferTexture2D 将纹理附加到它

我的渲染:

  • 绑定屏幕外帧缓冲区。
  • 使用我的第一个着色器程序
  • 画出我的几何
  • 绑定默认帧缓冲
  • 使用我的第二个着色器程序
  • 绘制一个带有纹理的全屏四边形。
于 2011-05-13T11:01:17.923 回答