0

如何使用纹理图像创建全屏效果?直到现在我这样做:

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

此代码将我的图像放在屏幕的左上角,但我想要全屏纹理效果。那么,我该如何实现呢?

4

2 回答 2

2

正如@BrettHale 在评论中已经建议的那样,只需将所有矩阵设置为身份转换:

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

然后摆脱您已经进行的任何其他转换,例如glTranslatef()您当前在代码中的调用。使用0.0f而不是1.0f你的顶点的最后一个坐标,你应该很高兴。

于 2014-06-27T05:30:32.590 回答
0

好的,我做到了,现在可以了。对于全屏图像,我添加了此功能

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"
于 2014-06-26T22:25:58.310 回答