Есть ли способ привязать другую текстуру к вершине внутри нарисованного многоугольника? - PullRequest
0 голосов
/ 13 мая 2019

В настоящее время у меня есть ландшафт, сгенерированный из 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. Terrain

...