gpt4 book ai didi

c++ - 某些窗口大小的 OpenGL 图像无法正确显示

转载 作者:行者123 更新时间:2023-11-28 04:46:08 25 4
gpt4 key购买 nike

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

工作: enter image description here

损坏: enter image description here

这是我的绘制循环:

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

// 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()[1]);

glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);

glBegin(GL_TRIANGLES);
glVertex2f(1000, 1000);
glVertex2f(0, 1000);
glVertex2f(0, 0);

glVertex2f(1000, 1000);
glVertex2f(1000, 0);
glVertex2f(0, 0);
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();
}

此外,如果我删除 glEnable(GL_TEXTURE_GEN_S) 或 glEnable(GL_TEXTURE_GEN_T);或两者兼而有之,图像会完全变成蓝色或灰色。

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

最佳答案

好吧,我觉得不好意思!

我忘了添加 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();
}

关于c++ - 某些窗口大小的 OpenGL 图像无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49237005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com