推荐使用OpenGL ES应用程序显示背景图像的方法。
是否需要考虑性能/内存因素?
答案 0 :(得分:3)
我喜欢使用Apple的Texture2D类加载纹理。创建一个四边形(两个三角形,六个顶点),映射到屏幕的角落。然后将纹理坐标映射到顶点,将其传递给glDrawArrays并转到。我实际上有一个Class,它在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];
所以,现在你必须填写顶点数组。假设x,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仪器对它进行分析,看看是否有任何性能问题,然后处理它们。
Apple有一篇非常好的文档描述了最佳实践,并且在SO上也有一些有用的问题。我相信一旦你知道你遇到了什么(如果有的话),你就可以搜索它们。
答案 1 :(得分:1)
glDrawTexOES是最佳选择。