在OpenGL ES中渲染“图层”
我正在制作一个iOS应用程序,我希望能够使用单独的“图层”进行渲染,这样我就可以在它们之间进行混合,并在将它们全部融合在一起并渲染到屏幕之前分别使用着色器。
我知道我将渲染到纹理,然后在帧缓冲区中将这些纹理渲染到彼此的顶部,但我不清楚需要编写哪些代码才能遵循此过程。 在另一个答案中,我发现了我想要做的事情,但我不知道什么代码可以完成此任务:如何在iOS上使用OpenGL ES实现多层绘图? (例如,我如何“绑定纹理1,然后绘制它”?这对“附加纹理1”意味着什么?)
我也看过苹果公司关于这种技术的文档,但是关于这个过程的实际渲染部分的步骤或代码并不是很清楚。
我会如何去做这件事? (希望使用每个步骤的代码示例,因为我没有理解希望我只知道每步需要什么的指示性说明)
这是我想要用这个做的一个例子。 球体将被渲染成一个“图层”或Texture2D,然后我将穿过着色器,然后渲染已经部分渲染的场景。 我不知道什么样的openGL代码可以做到这一点。
你看错了地方。 要使用OpenGL,您需要学习OpenGL,而不是其他任何东西。 Apple不提供任何OpenGL文档,因为它是一个开放标准,因此规格可以自由发布。 Apple假定你已经熟悉它了。
我认为你遇到了麻烦,因为你不了解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
这样的函数来绑定一个帧缓冲区和纹理对象,而不是渲染缓冲区对象。
一旦渲染到纹理,并将帧缓冲区切换到最终缓冲区,并绑定您绘制的纹理和其他纹理,并执行最终的绘制。 您需要两个帧缓冲区:一个用于渲染到纹理,另一个用于最终输出。
上一篇: Rendering "layers" in OpenGL ES
下一篇: about converting the content of the uiview to the texture, OpenGL es