2013-04-27 24 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認爲圖像原點是在左下並且座標向右和向上增加。這與大多數計算機圖形系統形成對比,大多數計算機圖形系統假定原點位於左上方,垂直方向向下增加。

可能是你的問題。