OpenGL显示的Texture竟然旋转了90度,如何改正?

tsingmei 2010-02-22 08:52:58
大家好,我创建了一块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,竟然被竖的蓝/红线条填满了。为什么啊?
...全文
673 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
张赐 2010-02-22
  • 打赏
  • 举报
回复
楼主调整一下贴图的定点坐标顺序就可以了啊
tsingmei1 2010-02-22
  • 打赏
  • 举报
回复
Image数组的问题

8,325

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧