2013-04-27 83 views
0

我映射纹理坐标等:纹理坐标上的不同尺寸的矩形

static float texCoord[] = { 
0, 1, 
1, 1, 
1, 0, 
0, 0 
}; 

并且通过绘制它:

void Rectangle::Draw() 
{ 
const float vertices[] = { 
    x, y, 
    x + width, y, 
    x, y - height, 
    x + width, y - height 
}; 

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glColor3ub(255, 255, 255); 

glVertexPointer(2, GL_FLOAT, 0, vertices); 
glTexCoordPointer(2, GL_FLOAT, 2, texCoord); 

if  (IsTypeHorizontal()) glBindTexture(GL_TEXTURE_2D, texture_H); 
else /* (IsTypeVertical())*/ glBindTexture(GL_TEXTURE_2D, texture_V); 

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 

} 

纹理在垂直(高度>宽度)绘制是好的,但在水平方向(高度<宽度),纹理看起来是倒置的。即使我用texCoord_HtexCoord_V分隔纹理坐标,绘制的图像仍然是反转的?

我还需要知道什么?我的代码在这里有什么问题?

PS。我用土上传的纹理在OpenGL

回答

0

经过多次改变和交换纹理坐标,我意识到我浪费了我的时间。真正的问题是在这里

glTexCoordPointer(2, GL_FLOAT, 2, texCoord); 

第三个参数(W/C是stride)“引起的错误,它应该是0

0

尝试:

static float texCoord[] = { 
0, 1, 
1, 1, 
0, 0, 
1, 0 
}; 
+0

我画使用'GL_TRIANGLE_STRIP'不'GL_QUADS' – mr5 2013-04-27 14:01:28

+0

OK了四,我只注意到texcoords和职位并不匹配,在这种情况下交换最后两个coords。 – 2013-04-27 14:05:43

+0

什么是coords'?我认为那不是那里的问题。 'texcoords'和'vertices'使用相同的顶点绘图(例如'Z') – mr5 2013-04-27 14:17:40

0

大多数OpenGL新手得到的事实混淆,这与通常的集投影,变换和视口映射参数的OpenGL认为图像原点是在左下并且坐标向右和向上增加。这与大多数计算机图形系统形成对比,大多数计算机图形系统假定原点位于左上方,垂直方向向下增加。

可能是你的问题。