2010-10-06 118 views
5

您好,我對OpenGL相當陌生。在OpenGL中重複紋理

我的任務是在OpenGL中實現GDI畫筆以在MAC OS X上繪圖。因此,我轉向OpenGL中的紋理以首先繪製圖案,然後將其映射到繪製基元,如多邊形(矩形a例如)。我創建了一個8x8紋理貼圖,然後在500x500像素窗口中將它映射到一個多邊形上,座標如下所示。

glVertex3f(0.35,0.35,0.0);

glVertex3f(0.35,0.65,0.0);

glVertex3f(0.65,0.65,0.0);

glVertex3f(0.65,0.35,0.0);

因爲我需要畫筆效果,所以圖案必須沿矩形重複。矩形/正方形是0.3×0.3和整個窗口爲500×500,然後在像素方面所述多邊形是150×150。

因此需要重複是150/8

我因此設置了紋理座標作爲如下:

glTexCoord2f(0.0,  0.0); glVertex3f(0.35, 0.35, 0.0); 
glTexCoord2f(0.0,  150/8); glVertex3f(0.35, 0.65, 0.0); 
glTexCoord2f(150/8,  150/8); glVertex3f(0.65, 0.65, 0.0); 
glTexCoord2f(150/8,  0.0); glVertex3f(0.65, 0.35, 0.0); 

我具有垂直陰影線(一個紋理像素透明的其它有色)我已經作爲紋理創建圖案未被適當地映射在這個意義上,一些垂直線變得比其他寬的問題(一種別名問題)。這是否像這樣,我必須在映射時設置紋理座標?

感謝您的任何答覆

回答

3

如果你寫的代碼是什麼,你必須在你的代碼,然後150/8是你的問題。這是一個整數除法,並且不會返回浮點數18.75,而是整數18.

將您的代碼更改爲浮點值。

150.f/8.f 
14

如果我正確地理解了你,你沒有正確處理紋理座標。當使用glTexCoord2f()時,紋理從0.0,0.0擴展到1.0,1.0。所以,如果你想擁有一個紋理填充你使用一個四如下:

glTexCoord2f(0.0f, 0.0f); glVertex3f(0.35f, 0.35f, 0.0f); 
glTexCoord2f(0.0f, 1.0f); glVertex3f(0.35f, 0.65f, 0.0f); 
glTexCoord2f(1.0f, 1.0f); glVertex3f(0.65f, 0.65f, 0.0f); 
glTexCoord2f(1.0f, 0.0f); glVertex3f(0.65f, 0.35f, 0.0f); 

如果你想重複紋理8次穿過院子使用8.0f的表面代替1.0fs的texCoords呼叫。您還需要確保紋理設置爲在綁定紋理後設置爲重複設置。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

這可能是你的問題,但如果你仍然有走樣的問題,試圖尋找到glTexParameteriGL_TEXTURE_MAG_FILTERGL_TEXTURE_MAG_FILTER和MIP映射。

它可能已經過了十年了,但this old Flipcode tutorial仍然相關並值得一看。

編輯:在texcoord調用之前有頂點調用

+0

他如何正確對待texcoords?他完全按照你的建議? TexCoord呼叫來自Vertex呼叫。 – Bahbar 2010-10-06 10:02:24

+0

他正在使用150/8而不是8點。雖然關於通話順序的好點 - 我多年以來都沒有使用過即時模式! – Pike65 2010-10-06 10:57:00

+0

感謝Bahbar我剛剛意識到問題所在,並準備發佈解決方案。是的,這是問題!不管怎麼說,多謝拉 – user461426 2010-10-07 13:15:53