gpt4 book ai didi

iphone - 解释 OpenGL ES 背景图像的工作原理

转载 作者:行者123 更新时间:2023-12-03 21:20:58 32 4
gpt4 key购买 nike

有人可以解释一下如何在 OpenGL ES View 上渲染背景图像吗?从设置 OpenGL 环境的基础知识开始。我是 OpenGL 的新手。

我是seeing一个few问题/answers关于创建背景图像的 stackoverflow,但我目前正在尝试修改现有代码(特别是 Apple 的 GLPaint),并且我不确定需要什么和不需要什么。在尝试了这些解决方案但没有成功后,我认为我应该退后一步,实际尝试并了解发生了什么。盲目的黑客行为并没有让我走得太远=(

是否有任何简单的应用程序可以显示这一点?或者引用手册也很有用(最好是针对新手的手册) - 我尝试查看 this answer 的引用资料,但我不明白=(

最佳答案

您需要将图像(尺寸需要是2的幂)渲染到opengl。

您可以将图像放置在 3D 世界中,使其看起来像背景(我这样做是因为我的相机角度是固定的。)或者您可以在绘制图像之前推送一些矩阵以利用 glOrthof 并弹出之后矩阵关闭。

这里有一些代码可以帮助您将图像绘制到 opengl

glPushMatrix();

glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

UIImage *image = [UIImage imageNamed:@"map1.jpg"];
if (image == nil)
NSLog(@"Do real error checking here");

GLuint width = CGImageGetWidth(image.CGImage);
GLuint height = CGImageGetHeight(image.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void *imageData = malloc( height * width * 4 );
CGContextRef context = CGBitmapContextCreate( imageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
CGContextTranslateCTM (context, 0, height);
CGContextScaleCTM (context, 1.0, -1.0);
CGColorSpaceRelease( colorSpace );
CGContextClearRect( context, CGRectMake( 0, 0, width, height ) );
CGContextTranslateCTM( context, 0, height - height );
CGContextDrawImage( context, CGRectMake( 0, 0, width, height ), image.CGImage );

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);

CGContextRelease(context);

free(imageData);
[image release];

static const GLfloat texCoords[] = {
0.0, 1.0,
1.0, 1.0,
0.0, 0.0,
1.0, 0.0
};

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);


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

static const GLfloat vertices[] = {
-1.0, 1.0, -0.0,
1.0, 1.0, -0.0,
-1.0, -1.0, -0.0,
1.0, -1.0, -0.0
};
static const 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
};

glBindTexture(GL_TEXTURE_2D, texture[0]);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glPopMatrix();

关于iphone - 解释 OpenGL ES 背景图像的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4820372/

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