我是OpenGL的新手,正在尝试显示图片。我已经获得了#34;从文件加载图片"部分完成,我现在正试图将它绑定到我的形状(GL_TRIANGLES)。有时图像会正确显示,但有时却没有。我已经意识到它取决于窗口大小,所以如果我调整窗口大小,我可以得到一个清晰的图像。以下是屏幕外观的截图:
这是我的画布循环:
IDisposable
另外,如果我删除glEnable(GL_TEXTURE_GEN_S)或glEnable(GL_TEXTURE_GEN_T);或两者兼顾,图像完全呈蓝色或灰色。
编辑哦,我正在使用PNG文件,以防万一。
答案 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();
}