OpenGL图像无法正确显示某些窗口大小

时间:2018-03-12 13:55:37

标签: c++ opengl glut

我是OpenGL的新手,正在尝试显示图片。我已经获得了#34;从文件加载图片"部分完成,我现在正试图将它绑定到我的形状(GL_TRIANGLES)。有时图像会正确显示,但有时却没有。我已经意识到它取决于窗口大小,所以如果我调整窗口大小,我可以得到一个清晰的图像。以下是屏幕外观的截图:

工作: enter image description here

断裂: enter image description here

这是我的画布循环:

IDisposable

另外,如果我删除glEnable(GL_TEXTURE_GEN_S)或glEnable(GL_TEXTURE_GEN_T);或两者兼顾,图像完全呈蓝色或灰色。

编辑哦,我正在使用PNG文件,以防万一。

1 个答案:

答案 0 :(得分:1)

好吧,我感到羞怯!

我忘了添加glTexCoord2f ......

听听我的新文件以防其他人忘记了他们的大脑。 :)

void display() {
    // tick the frame counter
    frame++;
    start_time = clock();

    // update screen
    int width = glutGet(GLUT_WINDOW_WIDTH);
    int height = glutGet(GLUT_WINDOW_HEIGHT);
    update_screen(width, height);

    //glMatrixMode(GL_MODELVIEW);
    //glLoadIdentity();

    // clear screen
    glClearColor(0, 0, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT);

    glPushMatrix();

    glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, png::get_textures()[3]);

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

    glBegin(GL_QUADS);
        glTexCoord2f(0, 0); glVertex2f(0, 0);
        glTexCoord2f(1, 0); glVertex2f(1000, 0);
        glTexCoord2f(1, 1); glVertex2f(1000, 1000);
        glTexCoord2f(0, 1); glVertex2f(0, 1000);
    glEnd();

    glDisable(GL_TEXTURE_2D);

    glPopMatrix();
    glFlush();

    glutSwapBuffers();

    elapsed_time = ((clock() - start_time) / (double(CLOCKS_PER_SEC) / 10000));

    // tick all entities
    player.tick(elapsed_time);

    glutPostRedisplay();
}