我在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] 删除。
我来说两句