координаты текстуры opengl для полноэкранного эффекта

Как я могу создать полноэкранный эффект с изображением текстуры?
до сих пор я делаю это:

static void Draw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-5.0f);
texture[0] = SOIL_load_OGL_texture // load an image file directly as a new OpenGL texture
(
"my_img.jpg",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
);

glBindTexture(GL_TEXTURE_2D, texture[0]);
glBegin(GL_POLYGON);

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);

glEnd();
glutSwapBuffers();
}

этот код помещает мое изображение в верхнее левое положение экрана, но я хотел бы получить эффект полноэкранной текстуры.
Итак, как мне это сделать?

0

Решение

Как @BrettHale уже предложил в комментарии, просто установите все матрицы для преобразования идентичности:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

Затем избавьтесь от любых других преобразований, таких как glTranslatef() Звонок у вас есть в коде. использование 0.0f вместо 1.0f для последней координаты ваших вершин, и вы должны быть в порядке.

2

Другие решения

хорошо, я сделал это, и теперь это работает. для полноэкранного изображения я добавил эту функцию

void resize(int height, int width) {
const float ar = (float) widthX / (float) heightY;
glViewport(0, 20, widthX, heightY);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar+1, ar-1, -1.0, 1.0, 2.0, 90.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity() ;
}

не забудьте добавить это:

glutReshapeFunc(resize); // calling the "resize function"
0

По вопросам рекламы [email protected]