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();
結果:GL_TEXTURE_2Dを使用した場合http://i.imgur.com/sOqsH.png
私はそれを試しましたが、それでもテクスチャはすべてボークアップしています。私はそのように見える方法をあなたに示すことができました。 –
テクスチャ座標を0と1の間で固定しましたか? 0と1だけを使ってみて、テクスチャが各タイルに完全に表示されているかどうかを確認してください。そうでなければ何かが間違っています... – Rookie
元の投稿をスクリーンショットとコードで更新しました。 –