Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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_Lwjgl - Fatal编程技术网

Java 如何对GL_三角形_条进行纹理处理?

Java 如何对GL_三角形_条进行纹理处理?,java,opengl,lwjgl,Java,Opengl,Lwjgl,我有一些GL_三角形_带原语,它们是这样绘制的: glNewList(heightmapDisplayList, GL_COMPILE); for (int z = 0; z < data.length - 1; z++) { glBegin(GL_TRIANGLE_STRIP); for (int x = 0; x < data[z].length; x++) { glVertex3f(x, data[z][x], z); glVer

我有一些GL_三角形_带原语,它们是这样绘制的:

glNewList(heightmapDisplayList, GL_COMPILE);
for (int z = 0; z < data.length - 1; z++) {
    glBegin(GL_TRIANGLE_STRIP);
    for (int x = 0; x < data[z].length; x++) {
        glVertex3f(x, data[z][x], z);
        glVertex3f(x, data[z + 1][x], z + 1);   
    }
    glEnd();
}
glEndList();
glNewList(高度映射显示列表,GL\u编译);
对于(intz=0;z
我该怎么做呢?我很容易就知道如何对事物进行纹理处理,例如
GL_QUADS
,但我不知道在哪里放置带有三角形条带的
glTexCoord2f()
调用(以及迭代等)


我使用lwjgl,所以用java来回答就很好了。

为基本体的每个顶点指定纹理坐标:对于每个对glVertex3f的调用,应该有一个对glTexCoord2f的匹配调用。关于纹理坐标的实际值,这取决于您想要实现什么。一种简单的方法是从用于三角形条带的索引中导出2D纹理坐标(s,t)。下面是一个实现此功能的示例:

glNewList(heightmapDisplayList, GL_COMPILE);
for (int z = 0; z < data.length - 1; z++) {
    glBegin(GL_TRIANGLE_STRIP);
    // The t texture coordinate for z and z + 1
    float t0 = (float)z / (data.length - 1); // t0 in [0,1]
    float t1 = (float)(z + 1) / (data.length - 1); // t1 in [0,1]
    for (int x = 0; x < data[z].length; x++) {
        // The s texture coordinate for x
        float s = (float)x / (data[z].length - 1); // s in [0, 1]
        glTexCoord2f(s, t0);
        glVertex3f(x, data[z][x], z);
        glTexCoord2f(s, t1); 
        glVertex3f(x, data[z + 1][x], z + 1);
    }
    glEnd();
}
glEndList();
glNewList(高度映射显示列表,GL\u编译);
对于(intz=0;z
它不起作用。相反,它的输出是白色的。此外,没有其他渲染。我错过什么了吗?甚至我的(绿色)船也是蓝色的!我只看到了一小部分地形。如果没有纹理地形的代码,它通常看起来是这样的:下面是粘贴的代码:如果您能提供帮助,那就太好了!这里的通话顺序不对。
glTexCoord2f()
调用需要在相应的
glVertex3f()
调用之前。除了@RetoKoradi指出的错误之外,代码段中最后一个绑定的纹理是lookupTexture而不是textureID。