Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用显示列表和GL_三角形_条对高度贴图进行纹理处理?_Java_Opengl_Textures_Lwjgl_Terrain - Fatal编程技术网

Java 使用显示列表和GL_三角形_条对高度贴图进行纹理处理?

Java 使用显示列表和GL_三角形_条对高度贴图进行纹理处理?,java,opengl,textures,lwjgl,terrain,Java,Opengl,Textures,Lwjgl,Terrain,我想在上面的代码中添加一个纹理 更可取的是,我想使纹理根据地形的高度而变化。这样,我就可以创建一个好看的地形,而不是100%相同 如您所见,我使用的是一个DisplayList和一个GL_TRIANGLE_STRIP,我使用“glCallListheightmapDisplayList”调用它 目前,我只是根据高度设置了一个颜色,但是这看起来不是很好,因为我将贴图向上缩放了8,1,8,这样我可以得到一个顶点较少的大型贴图 那么,我如何在不设置逐顶点颜色或类似设置的情况下实现这一点呢?您是否阅读过

我想在上面的代码中添加一个纹理

更可取的是,我想使纹理根据地形的高度而变化。这样,我就可以创建一个好看的地形,而不是100%相同

如您所见,我使用的是一个DisplayList和一个GL_TRIANGLE_STRIP,我使用“glCallListheightmapDisplayList”调用它

目前,我只是根据高度设置了一个颜色,但是这看起来不是很好,因为我将贴图向上缩放了8,1,8,这样我可以得到一个顶点较少的大型贴图


那么,我如何在不设置逐顶点颜色或类似设置的情况下实现这一点呢?

您是否阅读过有关顶点和像素着色器的内容?对于So格式来说,您的问题实在太广泛了。您应该能够在线找到有关纹理贴图的教程。您将需要生成纹理ID GLIGEXTIONS,绑定它们,加载纹理数据GLTEXIGE2D,并定义纹理坐标GLTEXCORD而不是颜色。此外,尽管这不是问题的一部分,但您可能需要考虑现代OpenGL特性。显示列表非常过时,不推荐使用。查找VBOs顶点缓冲区对象等。我看不出上面的任何注释对我有什么帮助。顶点和像素着色器不能帮助我添加纹理。纹理怎么会太宽?这比我几天前问的“我如何删除JFrame上的内容”更宽泛。我使用VBO做很多事情,但是从来没有在heightmap上实现它们。。。但仍然不能解决我的问题。
glNewList(heightmapDisplayList, GL_COMPILE);

    // Iterate over the 'strips' of heightmap data.
    for (int z = 0; z < data.length - 1; z++) {
        // Render a triangle strip for each 'strip'.
        glBegin(GL_TRIANGLE_STRIP);
        for (int x = 0; x < data[z].length; x++) {
            // Take a vertex from the current strip
            if (((blue[z][x] / 255) < 0.4))
                glColor4f((red[z][x] / 255) / 2
                        + (float) (Math.random() / 10), (green[z][x] / 255)
                        / 2 + (float) (Math.random() / 10),
                        (blue[z][x] / 255) / 2
                                + (float) (Math.random() / 10), 1);
            else {
                glColor4f((red[z][x] / 255) / 2
                        + (float) (Math.random() / 10), (green[z][x] / 255)
                        / 2 + (float) (Math.random() / 10),
                        (blue[z][x] / 255) / 2
                                + (float) (Math.random() / 10), 1);
            }
            if (data[z][x] >= WATER_LEVEL -10){

            glVertex3f(x, data[z][x], z);

            // Take a vertex from the next strip
            glVertex3f(x, data[z + 1][x], z + 1);

            }

        }
        glEnd();
    }
    glEndList();