gpt4 book ai didi

iphone - 如何在 OpenGL ES for iphone 中加载和显示图像

转载 作者:太空狗 更新时间:2023-10-30 03:25:40 26 4
gpt4 key购买 nike

我是新手,正在尝试使用 OpenGL ES 在我的 iPhone 屏幕上显示 Sprite 。我知道用 cocos2d 做起来要简单得多,但现在我想直接在 OpenGL 上编码。有没有简单而有效的方法来在 OpenGL ES 中加载和显示 Sprite 。到目前为止,我发现的要复杂得多。 :(

最佳答案

下面是一些从包中加载 png 的代码:

UIImage* image = [UIImage imageNamed:@"PictureName.png"];
GLubyte* imageData = malloc(image.size.width * image.size.height * 4);
CGContextRef imageContext = CGBitmapContextCreate(imageData, image.size.width, image.size.height, 8, image.size.width * 4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(imageContext, CGRectMake(0.0, 0.0, image.size.width, image.size.height), image.CGImage);
CGContextRelease(imageContext);

下面是一些代码,用于使用该图像数据创建纹理。

GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.size.width, image.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

以及如何呈现它的示例:

glBindTexture(GL_TEXTURE_2D, texture);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)

在这里您需要找到适合您需要的顶点、法线和纹理坐标的值。

更新 1

记得像这样设置正确的状态:

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

如果您使用 glOrthof(见下文)在您的应用中设置 2D 投影,您可以使用这些值:

GLfloat vertices[] = {
-1.0, 1.0,
1.0, 1.0,
-1.0, -1.0,
1.0, -1.0, };

GLfloat normals[] = {
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0 };

GLfloat textureCoords[] = {
0.0, 0.0,
1.0, 0.0,
0.0, 1.0,
1.0, 1.0 };

更新 2

这是我在使用上面的代码渲染 Sprite 时设置投影模式的方式:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-5.0, 5.0, -7.5, 7.5, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

这就是我设置混合功能的方式。这允许 png 文件中的透明度:

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

关于iphone - 如何在 OpenGL ES for iphone 中加载和显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3387132/

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