我正在研究一个用 Perlin Noise、Java 和 LWJGL 生成的无限世界。但我遇到了一个问题,有点难以解释,所以我制作了一个视频:http://youtu.be/D_NUBJZ_5Kw显然,问题在于所有地面之间的黑色空间。
我已经尝试使所有值加倍而不是 float ,但这并没有解决问题。
这是我正在使用的一段代码:
float height2, height = (float)getHeight(x, y);
height2 = (float) ((getHeight(x-1, y+1) + height) / 2);
vertexhelper.addVertexColorAndTexture(x, height2, y+1, r, g, b, a, 0f, 1f);
height2 = (float) ((getHeight(x+1, y+1) + height) / 2);
vertexhelper.addVertexColorAndTexture(x+1, height2, y+1, r, g, b, a, 1f, 1f);
height2 = (float) ((getHeight(x+1, y-1) + height) / 2);
vertexhelper.addVertexColorAndTexture(x+1, height2, y, r, g, b, a, 1f, 0f);
height2 = (float) ((getHeight(x-1, y-1) + height) / 2);
vertexhelper.addVertexColorAndTexture(x, height2, y, r, g, b, a, 0f, 0f);
我在 x->16 和 y->16 的 block 初始化时循环执行此操作。 vertexhelper
是我制作的一个类,它将所有内容放入数组中。
(我在这里使用 float ,但那是在进行数学计算之后,所以这应该不是问题)
最佳答案
我必须考虑高度图上的 4 个位置,而不是 2 个。所以而不是
height2 = (float) ((getHeight(x-1, y-1) + height) / 2);
我必须使用
height2 = (float) ((getHeight(x, y-1) + getHeight(x-1, y) + getHeight(x-1, y-1) + height) / 4);
这解决了它。
关于java - 高度图上 2 个顶点之间的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903149/