lwjgl(opengl)纹理被涂抹

dreadiscool

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

这是我的纹理外观的屏幕截图

草

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

搞乱渲染

提前致谢!

杰里科

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

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

另外,我非常确定您需要在相应的顶点调用之前放置texture2D调用顶点调用告诉GL您已经完成了该顶点,然后继续进行下一个顶点。

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章