什么可能导致网格生成旋转? LWGL

What could be causing meshes to generate rotated? LWGL

我正在从高度图加载块值以创建无限地形,但我在渲染每个网格块时遇到问题。当我加载单个 500x500 单元网格时,它是一个平滑的网格。当我加载一个 5x5 的 100x100 网格时,它是一团乱麻。

我让这两种不同类型的网格保存了每个网格高度的图像,它们都给出了一个平滑的高度图,其值逐渐变化。

...但是当我渲染它们时,这就是我所看到的: 500x500 mesh 5x5 100x100 mesh

如您所见,5x5 网格根本没有对齐。前三个块 0:0、0:1 和 1:0 看起来是正确的,但其他的都不同。它们的变换矩阵中的所有旋转都是 vec3(0,0,0),但它们是这样生成的。这是用于呈现它们的代码:

    public void render() {
        shader.start();
        shader.loadViewMatrix(Maths.createViewMatrix(engine.getPlayer()));
        shader.loadLight(engine.getManagers().getLightManager().getLights().get(0));

        for(Chunk chunk : engine.getManagers().getTerrainManager().getLoadedChunks().values()) {
            RawModel model = chunk.getModel();

            bindChunk(chunk);
            loadShaderUniforms(chunk);
            GL11.glDrawElements(GL11.GL_TRIANGLES, model.getVertexCount(), GL11.GL_UNSIGNED_INT, 0);

            unbindChunk();
        }
        shader.stop();
    }

    private void bindChunk(Chunk chunk) {
        RawModel rawModel = chunk.getModel();
        GL30.glBindVertexArray(rawModel.getVaoID());
        GL20.glEnableVertexAttribArray(0); // position
        GL20.glEnableVertexAttribArray(1); // textureCoordinates
        GL20.glEnableVertexAttribArray(2); // normal

        ModelTexture texture = chunk.getTexture();
        GL13.glActiveTexture(GL13.GL_TEXTURE0);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getTextureID());
    }

    private void unbindChunk() {
        GL20.glDisableVertexAttribArray(0);
        GL20.glDisableVertexAttribArray(1);
        GL20.glDisableVertexAttribArray(2);
    }

    private void loadShaderUniforms(Chunk chunk) {
        Matrix4f transformation = Maths.createTransformationMatrix(chunk.getLocation().getPosition(),
                chunk.getLocation().getRotation(), 1, true);
        System.out.println(chunk.getLocation().getRotation());
        shader.loadTransformationMatrix(transformation);
        shader.setShowHeightMap(chunk.shouldShowHeightMap());
    }

我不熟悉 LWJGL 如何使用 VAO 的细节,所以这可能是一个我忘记的简单问题。任何帮助将不胜感激,因为我花了几天时间将问题缩小为渲染问题,而不是 perlin noise/mesh 代的问题。

我发现了问题!我创建网格的方式存在一个缺陷,导致它渲染翻转的三角形。我通过关闭剔除并从两侧观察它并移动三个顶点坐标来发现这一点。修复顶点面(例如,将其从顺时针方向交换为 counter-clockwise,然后反转 X 和 Z 坐标)修复它。