gpt4 book ai didi

iphone - OpenGL ES 推荐的背景图像显示方式

转载 作者:行者123 更新时间:2023-12-03 19:15:11 24 4
gpt4 key购买 nike

在 OpenGL ES 应用程序中显示背景图像的推荐方式是什么。

  1. UIImage 添加到 glview 下的 View 层次结构中?
  2. 在 OpenGL 绘制例程中根据内存中的纹理绘制图像?

是否需要考虑任何性能/内存因素?

最佳答案

我喜欢使用Apple的Texture2D类加载纹理。创建一个映射到屏幕角的四边形(两个三角形,六个顶点)。然后将纹理坐标映射到顶点,将其传递给 glDrawArrays 并继续。我实际上有一个类,它采用 CG 坐标中的帧,将其转换为 OpenGL 坐标,然后在帧中绘制图像。

假设您有一个这样的结构:

struct {
GLfloat x; // OpenGL X Coordinate
GLfloat y; // OpenGL Y Coordinate
GLfloat z; // OpenGL Z Coordinate
GLfloat s; // Texture S Coordinate
Glfloat t; // Texture T Coordinate
} vertexData;

以及像这样的顶点数据数组:

struct vertexData verts[6];

你有一个Texture2D对象:

 texture = [[Texture2D alloc] initWithImage:[UIImage imageNamed:image] filter:filter pixelFormat:pixelFormat];

所以,现在您必须填充顶点数组。假设 3D,x 范围 [-1, 1] 和 y 范围 [-1, 1],原点为 z,那么您将像这样初始化顶点:

verts[0].x = verts[1].x = verts[5].x = -1.0;
verts[2].x = verts[3].x = verts[4].x = 1.0;

verts[0].y = verts[2].y = verts[4].y = 1.0;
verts[1].y = verts[3].y = verts[5].y = -1.0;

verts[0].z = verts[1].z = verts[2].z = 0.0;
verts[3].z = verts[4].z = verts[5].z = 0.0;

verts[0].s = verts[1].s = verts[5].s = tlxf;
verts[2].s = verts[3].s = verts[4].s = trxf;

verts[0].t = verts[2].t = verts[4].t = ttyf;
verts[1].t = verts[3].t = verts[5].t = tbyf;

最后,您需要绘制:

glBindTexture(GL_TEXTURE_2D, texture.name);
glVertexPointer(3, GL_FLOAT, sizeof(struct vertexData), &verts[0].x);
glTexCoordPointer(2, GL_FLOAT, sizeof(struct vertexData), &verts[0].s);
glDrawArrays(GL_TRIANGLES, 0, 6);

我省略了有关设置 OpenGL 的任何细节。如果您已经走到这一步,我想您已经做到了。

在 OpenGL 中工作时需要考虑大量的性能和内存限制,但我不建议您过于担心它们。一旦你让它工作起来,用 OpenGL Instrument 来分析它,看看是否有任何性能问题,然后处理这些问题。

Apple 有一个非常好的文档,描述了最佳实践,并且也有一些关于 SO 的有用问题。我相信,一旦您知道自己面临什么(如果有的话),您就能够搜索它们。

关于iphone - OpenGL ES 推荐的背景图像显示方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2276633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com