Что могло вызвать вращение сетки? LWGL - PullRequest
0 голосов
/ 07 августа 2020

Я загружаю значения фрагментов из карты высот для создания бесконечного ландшафта, но у меня возникают проблемы с отрисовкой каждого фрагмента me sh. Когда я загружаю одну единицу 500x500 меня sh, это гладкий я sh. Когда я загружаю сетки 5x5 из 100x100, это беспорядок. карта с постепенным изменением значений.

... Но когда я их визуализирую, я вижу вот что: 500x500 me sh 5x5 100x100 me sh

Как видите, 5x5 me sh совсем не выровнен. Первые три фрагмента 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 / me sh.

1 Ответ

0 голосов
/ 12 августа 2020

Я обнаружил проблему! В том, как я создал me sh, был недостаток, из-за которого треугольники рендерились перевернутыми. Я обнаружил это, отключив отбраковку и наблюдая за ним с обеих сторон и перемещая координаты трех вершин. Исправление грани вершины (например, переключение с часовой стрелки на против часовой стрелки с последующим изменением координат X и Z на противоположные) исправило это.

...