В настоящее время у меня есть ландшафт, сгенерированный из triangle_strip в двухмерном цикле с некоторыми данными о высоте перлин-шума в двумерном массиве с плавающей точкой, который называется heightMap[z][x]
.
Я хочу иметь возможность изменять текстуру, привязанную в настоящее время к каждой вершине, в зависимости от высоты любой данной вершины.
Есть ли способ связать текстуру внутри нарисованного многоугольника gl.
Здесь отображается текущий код:
//Push and pop
gl.glPushMatrix();
gl.glTranslated(-(SIZE/2), 0, -(SIZE/2));
//Load
tex = textures[0];
//Bind
tex.enable(gl);
tex.bind(gl);
//Set clamping (Set clamping for s and then t)
tex.setTexParameteri(gl, GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT);
tex.setTexParameteri(gl, GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT);
tex.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR_MIPMAP_LINEAR );
tex.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR_MIPMAP_LINEAR );
//Set terrain for height map
for(int z=0; z<SIZE; z++) {
gl.glBegin(GL2.GL_TRIANGLE_STRIP);
for(int x=0; x<SIZE; x++) {
gl.glNormal3fv(this.calculateNormal(x, z),0);
gl.glTexCoord2d(x, z);
gl.glVertex3f(x, heightMap[z][x], z);
gl.glNormal3fv(this.calculateNormal(x, z+1),0);
gl.glTexCoord2d(x, z+1);
gl.glVertex3f(x, heightMap[z+1][x], z+1);
}
gl.glEnd();
}
tex.disable(gl);
//Pop
gl.glPopMatrix();
В настоящее время моя местность выглядит так, что привязана только текстура травы.
Я хочу изменить текстуру на снег, если высота превышает value
, и изменить ее на гравий, если угол между значением высоты в heightMap[z][x]
и heightMap[z+1][x]
превышает value
.