如何使用OpenGL ES渲染图像?

时间:2009-08-04 06:14:12

标签: iphone opengl-es

我是OpenGL ES的新手。我之前用Objective-c开发了可可游戏。现在我想用OpenGL ES为iPhone开发3D游戏。我在初学阶段。我可以通过OpenGL ES创建三角形,正方形,立方体,金字塔。但是,如果我们有任何.png图像,我们必须在游戏中渲染它,那么我们必须做什么?为此,我们需要任何其他工具,如团结或什么?我完全不能理解它。或者我们必须像在apple.developer.com网站上给出的GLSprite示例那样做。在那个例子中,他们使用一个teapot.h文件绘制一个茶壶。 teapot.h文件包含一些点,并通过使用这些点,他们绘制三角形,形成一个茶壶。这是绘制任何图像的方法。我想我的思路方向错误,所以请指导我。

提前谢谢

2 个答案:

答案 0 :(得分:4)

要绘制图像,您需要先定义可应用图像的几何体:

float w = width / 2;
float h = height / 2;

float x = 10.0f;
float y = 10.0f;
float z = 0.0f;

float scaleX = 1.0f;
float scaleY = 1.0f;
float scaleZ = 1.0f;

const GLfloat squareVertices[] = {
    -w, -h,
    w, -h,
    -w,  h,
    w,  h,
};

const GLfloat textureCoords[] = {
    0, 0,
    1, 0,
    0, 1,
    1, 1,
};

然后,您可以应用纹理并渲染此几何体:

glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);

// apply texture -- how to create and bind a physical image is a whole different question
glBindTexture(GL_TEXTURE_2D, yourTextureID);

glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);

glPushMatrix();
    glTranslatef(x, y, z);
    glScalef(scaleX, scaleY, scaleZ);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glPopMatrix();

glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);

请注意,这些代码段假设您已设置了工作视图/投影。

答案 1 :(得分:0)

以前在SDK中的Crash Landing示例也是一个很好的起点(显然音频代码已被破坏,这就是它被删除的原因,但OpenGL代码仍然很好)

您可以找到示例here的链接。