这就是:我想将图片作为填充整个视口的背景加载。无论相机面向何处,此背景都应始终面向相机。 首先,我自然而然地认为使用纹理作为背景,我的代码如下:
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0,1,0,1,0,1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D, myimage.GetID());
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(0, 0);
glTexCoord2f(1, 0); glVertex2f(1, 0);
glTexCoord2f(1, 1); glVertex2f(1, 1);
glTexCoord2f(0, 1); glVertex2f(0, 1);
glEnd();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
相信我,myimage是一个CIMAGE类,可以将图片加载到纹理中,效果很好。 但是,由于某些未知原因,我的应用程序无法将纹理加载到矩形中。 (我在这里描述了这个问题click)结果,我只能在视口周围看到一个矩形框。
所以,我找到了另一个解决方案。
我使用glDrawPixels而不是纹理。我的代码如下:
glRasterPos2i(0, 0);
glDrawPixels(myimage.GetWidth(), myimage.GetHeight(), (myimage.GetBPP() == 24)?GL_RGB:GL_RGBA, GL_UNSIGNED_BYTE,
myimage.GetData());
图片出现了!然而,这张照片并不总是面向我的相机。它只出现在特定方向。你知道,就像场景中的一个物体,但不是背景总是面向相机。
所以有人知道如何使用glDrawPixels来实现背景吗?
顺便说一句,我认为这个背景不是放置在3D场景中的对象。因此广告牌可能不是我的解决方案。同样,这个背景填充在整个视图端口,并始终面向相机。
答案 0 :(得分:4)
纹理加载可能无法工作的原因之一是因为它可能没有二维幂。尝试方形256x256纹理(或类似),看看这是否是问题。点击此处了解Rectangle Textures的更多信息。
回到你的背景问题 - 正确的方法是
设置填充整个屏幕的正交投影/视口。
glViewport(0,0,nw,nh);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,1,0,1,0,1);
glMatrixMode(GL_MODELVIEW);
禁用深度测试
使用已加载的纹理/纹理矩形绘制全屏四边形。
glBegin(GL_QUADS);
glVertex2f(0,0);
glVertex2f(1,0);
glVertex2f(1,1);
glVertex2f(0,1);
glEnd();
设置常规投影/模型视图并继续。
希望这有帮助!