OpenGL显示的Texture竟然旋转了90度,如何改正?
大家好,我创建了一块OpenGL的Texture,高30像素,宽300像素,使用蓝/红色横线填充。我想将该Texture显示在一个高240,宽300的Opengl窗口中,不过发现显示的时候,该Texture被旋转了90度,以30像素×30像素的大小竖着填充了这个Texture的区域,蓝/红色横线,都变成了竖线。下面是代码,为什么啊?
下面是给Image赋值的代码:
GLuint texture = 0;
#define ImageWidth 300
GLubyte Image[ImageWidth][IGOS_TASKBAR_HEIGHT][4];
void makeImage(void)
{
int i, j;
for (i = 0; i < ImageWidth; i++)
{
for(j = 0; j < IGOS_TASKBAR_HEIGHT; j++)
{
if(j%4 == 0)
{
Image[i][j][0] = (GLubyte)0;
Image[i][j][1] = (GLubyte)0;
Image[i][j][2] = (GLubyte)255;
Image[i][j][3] = (GLubyte)255;
}
else
{
Image[i][j][0] = (GLubyte)255;
Image[i][j][1] = (GLubyte)0;
Image[i][j][2] = (GLubyte)0;
Image[i][j][3] = (GLubyte)255;
}
}
}
}
下面是创建Texture的代码:
makeImage();
if (texture == ~0)
{
glBindTexture(GL_TEXTURE_2D, 0);
glDeleteTextures(1, &texture);
texture = ~0;
}
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
//glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
//glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ImageWidth, IGOS_TASKBAR_HEIGHT, 0, GL_BGRA, GL_UNSIGNED_BYTE, Image);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
下面是Display函数的代码:
glPushAttrib(GL_ALL_ATTRIB_BITS);//不这么做,就会导致ViewPort不对
glViewport(0, 0, ImageWidth, IGOS_TASKBAR_HEIGHT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, ImageWidth, 0.0, IGOS_TASKBAR_HEIGHT, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
//启动纹理映射
glEnable(GL_TEXTURE_2D);
//设置纹理坐标和物体几何坐标
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex2f(0.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex2f(0.0, (GLfloat)IGOS_TASKBAR_HEIGHT);
glTexCoord2f(1.0, 1.0); glVertex2f((GLfloat)ImageWidth, (GLfloat)IGOS_TASKBAR_HEIGHT);
glTexCoord2f(1.0, 0.0); glVertex2f((GLfloat)ImageWidth, 0.0);
glEnd();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
本来应该显示横的蓝/红线条的Texture,竟然被竖的蓝/红线条填满了。为什么啊?