在OpenGL中,我繪製了一個2D等距網格。 (圖片:http://i.imgur.com/nUZax.png)。請不要介意這些草率的代碼,因爲很多這只是嘗試了一些東西,我試圖讓我的手弄髒這些東西,然後纔會正確地編寫實際引擎的平鋪部分。OpenGL,等距2D地圖和紋理
每塊瓷磚寬76像素,高38像素。現在我想用我製作的一點草紋紋理每塊瓷磚。但是,這不會很好!
我的問題是,紋理不斷看起來都搞砸了。它的尺寸小於它的尺寸(如尺寸的一半),並且被白色包圍。這是我用來應用紋理的代碼(它當然是76x38的尺寸!)。
void drawSquare(int x, int y) {
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2i(38, -19); glVertex2i(x+38, y);
glTexCoord2i(-38, 19); glVertex2i(x, y+19);
glTexCoord2i(38, -19); glVertex2i(x-38, y);
glTexCoord2i(-38, 19); glVertex2i(x, y-19);
glEnd();
}
這是計算X代碼的一部分,Y.
for (int y = 1; y < gridY+1; y++) {
for (int x = 1; x < gridX+1; x++) {
drawSquare((x-y) * 38 + (SCREEN_SIZE_X/2), (x+y) * 19);
}
}
我應該也補充一點,我把我的鄰位的設置是這樣的。
glOrtho(0, SCREEN_SIZE_X, 0, SCREEN_SIZE_Y, -1, 1);
(SCREEN_SIZE_X和SCREEN_SIZE_Y擺明了800×600)
任何人都可以幫助我在這裏?這將不勝感激。也許要更清楚一點,這就是它現在的樣子!
編輯: 經過一些幫助後,它已被更改爲此。
glBegin(GL_QUADS);
//glColor3f(r, g, b);
glTexCoord2f(0,1); glVertex2i(x+38, y);
glTexCoord2f(1,1); glVertex2i(x, y+19);
glTexCoord2f(1,0); glVertex2i(x-38, y);
glTexCoord2f(0,0); glVertex2i(x, y-19);
glEnd();
結果:http://i.imgur.com/sOqsH.png
我已經嘗試過,但紋理仍然出來所有borked了。我可以告訴你在這種情況下它是怎麼樣的。 – 2011-12-29 15:46:27
你把你的紋理座標夾在0和1之間嗎?嘗試只使用0和1,看看紋理是否顯示_completely_在每個瓷磚,如果沒有,那麼別的是錯的...... – Rookie 2011-12-29 15:54:07
更新了原始的文章與截圖和代碼。 – 2011-12-29 15:54:19