Объясните, как работают фоновые изображения OpenGL ES - PullRequest
2 голосов
/ 27 января 2011

Может кто-нибудь объяснить, как вы отображаете фоновые изображения в представлении OpenGL ES?Из основ настройки среды OpenGL.Я новичок в OpenGL здесь.

Я вижу a несколько вопросов / ответов в стеке о создании фоновых изображений, но я пытаюсь изменить существующий код вмомент (в частности Apple GLPaint), и я не уверен, что нужно, а что нет.Попробовав решения, но безуспешно, я решил сделать шаг назад и попытаться понять, что происходит.Безрассудный взлом не дал мне далеко = (

Есть ли какие-нибудь простые приложения, которые показывают это? Или справочные руководства были бы слишком полезны (желательно для новичков) - я попытался просмотреть ссылки для этогоответ , но я не понимаю = (

Ответы [ 2 ]

1 голос
/ 28 января 2011

вам нужно сделать изображение (размеры должны быть степенью 2), чтобы открыть.

Вы можете либо разместить изображение в своем трехмерном мире так, чтобы оно казалось фоновым (я делаю это, потому что угол моей камеры фиксирован.), Либо вы можете нажать некоторые матрицы, чтобы использовать 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();
0 голосов
/ 27 января 2011

Я рекомендую вам прочитать эту статью с самого начала ссылка , если вы хотите понять основы OpenGL ES 1.1.Также предлагается множество примеров проектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...