在 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)的颜色不透明度问题

OpenGL ES 2.0 顶点数据错误

iPhone OpenGL ES 2.0 与 Cocos2D 的混合产生了意想不到的结果

如何将变量(不统一)浮点值从 C++ 传递到顶点着色器 OpenGL ES 2.0

Android:了解 OnDrawFrame、FPS 和 VSync (OpenGL ES 2.0)

Framebuffer FBO渲染到纹理很慢,在Android上使用OpenGL ES 2.0,为啥?