【问题标题】:lwjgl (opengl) texture getting smearedlwjgl (opengl) 纹理被涂抹
【发布时间】:2014-02-22 00:47:16
【问题描述】:

我在使用 Java 中的 OpenGL (LWJGL) 时遇到了一些问题,我想知道是否有人可以帮我解决这个问题 :-)

基本上,每当我对简单地形进行纹理处理时,我为其创建的纹理都会被涂抹。这是绘制图块的代码

private void drawTile(double xPos, double zPos, double height1, double height2, double height3, double height4) {
    GL11.glColor3ub((byte) 255, (byte) 255, (byte) 255);
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, Game.textureId);
    GL11.glBegin(GL11.GL_QUADS);
    double xIn = xPos * 0.15;
    double xOut = xIn + 0.15;
    double zIn = zPos * 0.15;
    double zOut = zIn + 0.15;

    // System.out.println(xIn + ", " + zIn + " -> " + xOut + ", " + zOut);

    GL11.glVertex3d(xIn, height1, zIn);
    GL11.glTexCoord2d(0d, 0d);

    GL11.glVertex3d(xOut, height2, zIn);
    GL11.glTexCoord2d(1d, 0d);

    GL11.glVertex3d(xOut, height3, zOut);
    GL11.glTexCoord2d(1d, 1d);

    GL11.glVertex3d(xIn, height4, zOut);
    GL11.glVertex2d(0d, 1d);

    GL11.glEnd();
}

这是我的纹理的截图

但是,这就是我渲染 4x4 网格后的结果...

提前致谢!

【问题讨论】:

    标签: java opengl lwjgl


    【解决方案1】:

    您有 4 个 vertex3d 调用、3 个 texture2d 调用和一个 vertex2d 调用。它看起来像一个简单的错字。

    GL11.glVertex3d(xIn, height4, zOut);
    GL11.glVertex2d(0d, 1d);
    //   ^^^^^^^^^^ Is not a texture2d call
    

    另外,我很确定您需要将 texture2D 调用放在 相应的顶点调用之前。一个顶点调用告诉 GL 你已经完成了那个顶点并且正在移动到下一个顶点。

    这两个问题最终都会产生相同的结果。您的两个顶点(在本例中为 northwest 顶点)以相同的纹理值结束,因此您会看到以线条作为边缘像素的独特直角三角形在整个三角形上重复。

    尝试用以下内容替换您的开始/结束内容:

    GL11.glTexCoord2d(0d, 0d);
    GL11.glVertex3d(xIn, height1, zIn);
    
    GL11.glTexCoord2d(1d, 0d);
    GL11.glVertex3d(xOut, height2, zIn);
    
    GL11.glTexCoord2d(1d, 1d);
    GL11.glVertex3d(xOut, height3, zOut);
    
    GL11.glTexCoord2d(0d, 1d);
    GL11.glVertex3d(xIn, height4, zOut);
    

    【讨论】:

    • 谢谢!你是救生员
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多