Java 使用显示列表和GL_三角形_条对高度贴图进行纹理处理?
我想在上面的代码中添加一个纹理 更可取的是,我想使纹理根据地形的高度而变化。这样,我就可以创建一个好看的地形,而不是100%相同 如您所见,我使用的是一个DisplayList和一个GL_TRIANGLE_STRIP,我使用“glCallListheightmapDisplayList”调用它 目前,我只是根据高度设置了一个颜色,但是这看起来不是很好,因为我将贴图向上缩放了8,1,8,这样我可以得到一个顶点较少的大型贴图Java 使用显示列表和GL_三角形_条对高度贴图进行纹理处理?,java,opengl,textures,lwjgl,terrain,Java,Opengl,Textures,Lwjgl,Terrain,我想在上面的代码中添加一个纹理 更可取的是,我想使纹理根据地形的高度而变化。这样,我就可以创建一个好看的地形,而不是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();