私は最近、seedbased heightmapジェネレータを完成させ、生成された地形にテクスチャを追加しようとしました。まず、テクスチャレンダリングを、以前のTerrainRendererに実装しました。これは、描画にGL_TRIANGLESを使用していました。glTexCoord2f()で三角形の線をテクスチャリングする?
これは私のテストの質感と非常によく動作します。ここでは
は私の古いレンダリングコードです:
for(int z = 0; z < terrain.terrainSizeZ-1; z++) {
GL11.glBegin(GL11.GL_TRIANGLES);
for(int x = 0; x < terrain.terrainSizeX-1; x++) {
GL11.glTexCoord2f(1, 0);
GL11.glVertex3f(x*size, terrain.terrain[x][z], z*size);
GL11.glTexCoord2f(1, 1);
GL11.glVertex3f(x*size, terrain.terrain[x][z+1], (z+1)*size);
GL11.glTexCoord2f(0, 0);
GL11.glVertex3f((x+1)*size, terrain.terrain[x+1][z], (z)*size);
GL11.glTexCoord2f(0, 0);
GL11.glVertex3f((x+1)*(size), terrain.terrain[x+1][z], z*size);
GL11.glTexCoord2f(1, 1);
GL11.glVertex3f(x*size, terrain.terrain[x][z+1], (z+1)*size);
GL11.glTexCoord2f(0, 1);
GL11.glVertex3f((x+1)*size, terrain.terrain[x+1][z+1], (z+1)*size);
}
GL11.glEnd();
}
それから私は私のレンダラを書き直し、大きなFPSブースト用GL_TRIANGLE_STRIPを使用しました。生の地形は完全にレンダリングされています。
私はまた、テクスチャリングを追加しようとしましたが、私はどのように三角形ストリップのテクスチャ座標を計算するのか分かりません。私が何をするかは関係ありません。常に少なくとも1つのテクスチャが正しく回転していません。 (だから、シームレスなテクスチャは非常に良い動作しない場合があります)
ここでは、私が何を意味するかを参照してください。ここでは
は私の新しいレンダリングコードです:
private static void render() {
[...]
for(int z = 0; z < terrain.terrainSizeZ-1; z++) {
GL11.glBegin(GL11.GL_TRIANGLE_STRIP);
for(int x = 0; x < terrain.terrainSizeX-1; x++) {
nextTextureCoord();
GL11.glVertex3f(x*size, terrain.terrain[x][z], z*size);
nextTextureCoord();
GL11.glVertex3f(x*size, terrain.terrain[x][z+1], (z+1)*size);
}
clearTextureCoord();
GL11.glEnd();
}
[...]
}
private static int texCoord = 0;
private static void nextTextureCoord() {
if(texCoord == 0)
GL11.glTexCoord2f(1, 0);
else if(texCoord == 1)
GL11.glTexCoord2f(1, 1);
else if(texCoord == 2)
GL11.glTexCoord2f(0, 0);
else if(texCoord == 3)
GL11.glTexCoord2f(0, 1);
if(texCoord < 3)
texCoord++;
else
texCoord = 0;
}
private static void clearTextureCoord() {
texCoord = 0;
}
本当にありがとうございます。 – nik2038