在OpenGL ES中渲染“图层”

我正在制作一个iOS应用程序,我希望能够使用单独的“图层”进行渲染,这样我就可以在它们之间进行混合,并在将它们全部融合在一起并渲染到屏幕之前分别使用着色器。

我知道我将渲染到纹理,然后在帧缓冲区中将这些纹理渲染到彼此的顶部,但我不清楚需要编写哪些代码才能遵循此过程。 在另一个答案中,我发现了我想要做的事情,但我不知道什么代码可以完成此任务:如何在iOS上使用OpenGL ES实现多层绘图? (例如,我如何“绑定纹理1,然后绘制它”?这对“附加纹理1”意味着什么?)

我也看过苹果公司关于这种技术的文档,但是关于这个过程的实际渲染部分的步骤或代码并不是很清楚。

我会如何去做这件事? (希望使用每个步骤的代码示例,因为我没有理解希望我只知道每步需要什么的指示性说明)

这是我想要用这个做的一个例子。 球体将被渲染成一个“图层”或Texture2D,然后我将穿过着色器,然后渲染已经部分渲染的场景。 我不知道什么样的openGL代码可以做到这一点。


你看错了地方。 要使用OpenGL,您需要学习OpenGL,而不是其他任何东西。 Apple不提供任何OpenGL文档,因为它是一个开放标准,因此规格可以自由发布。 Apple假定你已经熟悉它了。

  • OpenGL ES 2.0规范
  • 手册页
  • 我认为你遇到了麻烦,因为你不了解GL的具体条款。 规范非常清楚地描述了它们。 所以,请阅读规范。 这将节省您的时间很多。 或者你会保持麻烦。

    另外,我想介绍一个对OpenGL管道有非常好的概念描述的站点。

    http://www.songho.ca/opengl/

    该网站针对的是桌面版GL,并且一些API可能会有所不同。 请关注概念理解。 例如,下面是该网站的插图。

    对于更多的教程,谷歌与适当的关键字,如OpenGL ES 2.0 tutorials (或How-tos)。 这是一个示例链接,并且会有所帮助。 还有更多的教程。 如果说规格太无聊,和导师一起玩也很好。

    更新

    我想再说一次。 国际海事组织,OpenGL是关于绘制三角形 。 一切都最终转换为三维空间中的三角形来表示某种形状。 其他任何东西都只存在于优化中。 而且在大多数情况下,GL选择批量处理以实现主要优化策略。 因为每个绘图调用的开销对大多数游戏来说都是不可承受的

    很难启动OpenGL ES,因为它是桌面GL的优化版本,所以所有方便或简单的绘图功能都被剥离了。 即使在最新版本的桌面GL上也是如此。

    所以没有这样的drawOneTriangle函数。 相反,GL有类似的东西

  • 做一个缓冲区,
  • 把许多三角形的列表放在那里
  • 选择下一个绘图的缓冲区。
  • 一次绘制当前缓冲区中的所有三角形
  • 删除缓冲区。
  • 通过使用缓冲区,您不需要从CPU分配重复数据到GPU。 GL在任何地方都使用这种方法。 例如,你没有这样的drawOneTriangleWithTexture函数来使用纹理。 相反,你必须

  • 做一个缓冲区
  • 把许多像素列表在那里(位图)
  • 选择下一个绘图的缓冲区。
  • 用当前缓冲区中的纹理像素数据绘制所有三角形。
  • 删除缓冲区。
  • GL上所有过于复杂的东西都可以用于优化。 这可能起初看起来很奇怪,但设计通常有很好的理由。

    更新2

    现在我想你正在寻找渲染纹理功能。 (其实你已经提到过......)

    您可以使用渲染图像作为纹理来源。 去做这个,

  • 你需要使用像glFramebufferTexture这样的函数来绑定一个帧缓冲区和纹理对象,而不是渲染缓冲区对象。

  • 一旦渲染到纹理,并将帧缓冲区切换到最终缓冲区,并绑定您绘制的纹理和其他纹理,并执行最终的绘制。 您需要两个帧缓冲区:一个用于渲染到纹理,另一个用于最终输出。

  • 链接地址: http://www.djcxy.com/p/34021.html

    上一篇: Rendering "layers" in OpenGL ES

    下一篇: about converting the content of the uiview to the texture, OpenGL es