Как сделать изображение с помощью OpenGL ES? - PullRequest
2 голосов
/ 04 августа 2009

Я новичок в OpenGL ES. Я ранее разрабатывал игры в какао с целью-c. Теперь я хочу разработать 3D-игру для iPhone с помощью OpenGL ES. Я на начальном этапе. Я могу создать треугольник, квадрат, куб, пирамиду с помощью OpenGL ES. Но если у нас есть изображение в формате .png, и мы должны отобразить его в нашей игре, то что мы должны делать? Для этого нам нужен какой-то другой инструмент, например, единство или что? Я не могу понять это точно. или мы должны сделать это как пример GLSprite, который приведен на сайте apple.developer.com. В этом примере они рисуют чайник, используя один файл teapot.h. Файл teapot.h содержит несколько точек и, используя эти точки, строит треугольник, который образует чайник. Так это способ нарисовать любое изображение. Я думаю, что думаю в неправильном направлении, поэтому, пожалуйста, наведите меня на это.

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 04 августа 2009

Чтобы нарисовать изображение, вам нужно сначала определить геометрию, к которой оно может быть применено:

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);

Обратите внимание, что эти фрагменты кода предполагают, что вы настроили рабочий вид / проекцию.

0 голосов
/ 04 августа 2009

Образец Crash Landing, который был в SDK, также является хорошим местом для начала (очевидно, аудио код был сломан, и поэтому он был удален, но код OpenGL все еще хорош)

Вы можете найти ссылку на образец здесь .

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