lwjgl(opengl)纹理变得模糊

时间:2014-02-22 00:47:16

标签: java opengl lwjgl

我在使用Java(LWJGL)中的OpenGL时遇到了一些麻烦,我想知道是否有人可以帮我弄明白: - )

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

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();
}

这是我的纹理看起来像

的截图

grass

然而,这是我渲染4x4网格后的结果......

Messed up rendering

提前致谢!

1 个答案:

答案 0 :(得分:0)

你有4个vertex3d调用,3个texture2d调用和一个vertex2d调用。这看起来像一个简单的拼写错误。

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

另外,我很确定你需要在相应的顶点调用之前放置texture2D调用。顶点调用告诉GL您已完成该顶点并正在继续下一个顶点。

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

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

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);