在 OpenGL ES 2.0 中创建精灵类
Posted
技术标签:
【中文标题】在 OpenGL ES 2.0 中创建精灵类【英文标题】:Creating a sprite class in OpenGL ES 2.0 【发布时间】:2012-07-31 19:27:18 【问题描述】:我正在努力在 OpenGL ES 2.0 中创建一个精灵类,并且已经成功了。目前我有一个精灵的渲染方法,它由我的 EAGL 层中的渲染方法每隔一段时间调用一次。每次调用渲染时我都在创建新的顶点缓冲区和索引缓冲区,但效率不高,所以我调用了 glremovebuffer。不幸的是,当我这样做时,帧速率会显着降低。
所以目前我在初始化时创建了 vbo 和 ibo,它们在帧速率和内存消耗方面工作正常,但无法更新位置。
我有点不知所措,因为我刚刚开始使用 OpenGL,感谢任何帮助。
【问题讨论】:
【参考方案1】:通常,您希望使用 VBO 和 IBO 创建一次精灵,位于模型原点。要平移、旋转和缩放,您可以使用模型矩阵将您的精灵转换到所需的位置。
我相当肯定 iphone sdk 提供了一些很好的功能来做到这一点,但我不知道它们中的任何一个 :) 基本上,在你的着色器中,你获取你的位置坐标并将它乘以一个或多个矩阵,其中一个矩阵是模型矩阵,您可以将其更改为平移、旋转、缩放或这些矩阵的任何组合(实际上,它可以是您想要的任何矩阵,并且会产生不同的结果)。
有很多资源可以解释这些转换矩阵。例如,这里有一个: http://db-in.com/blog/2011/04/cameras-on-opengl-es-2-x/
我的建议是找一个与你理解水平相同的教程,并从中学习......
【讨论】:
以上是关于在 OpenGL ES 2.0 中创建精灵类的主要内容,如果未能解决你的问题,请参考以下文章
Opengl ES 2.0 - glDrawElements(GL_TRIANGLES)的颜色不透明度问题
iPhone OpenGL ES 2.0 与 Cocos2D 的混合产生了意想不到的结果
如何将变量(不统一)浮点值从 C++ 传递到顶点着色器 OpenGL ES 2.0