Эффект от OpenGL отключается при перемещении или повороте камеры

StackOverflow https://stackoverflow.com//questions/22062968

  •  23-12-2019
  •  | 
  •  

Вопрос

Я хочу добавить туман в небольшой 3d мир, я пытался возиться аргументами, однако туман не гомогенный.

У меня есть две проблемы, которые, возможно, связаны:

  1. Туман однородность:

    Когда я двигаюсь или поворачиваю свою точку зрения Glulookat, туман слишком тяжелый, и весь мир борно. Насколько два угла, где рендеринг тумана приятно. Туман кажется нормальным, когда орентация камеры на оси Y составляет 45 ° или -135 ° (напротив)

  2. Туман, сосредоточенный на происхождении сцены:

  3. Когда мой туман правильно отображается, он сосредоточен на (0; 0; 0) сцены

    Вот код, который я использую для инициализации тумана и вызов Glulookat

    private static final float density = 1f;
    
    private void initFog() {
        float[] vertices = {0.8f, 0.8f, 0.8f, 1f};
    
        ByteBuffer temp = ByteBuffer.allocateDirect(16);
        temp.order(ByteOrder.nativeOrder());   
        FloatBuffer fogColor = temp.asFloatBuffer(); 
        fogColor.put(vertices);
        GL11.glClearColor(0.8f,0.8f,0.8f,1.0f); 
        GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR);
        GL11.glFog(GL11.GL_FOG_COLOR, temp.asFloatBuffer());
        GL11.glFogf(GL11.GL_FOG_DENSITY, density);
        GL11.glHint(GL11.GL_FOG_HINT, GL11.GL_FASTEST);
        GL11.glFogf(GL11.GL_FOG_START, 1f);
        GL11.glFogf(GL11.GL_FOG_END, 10000f);
    }
    
    private void initWindow() {
        try {
            Display.setDisplayMode(new DisplayMode(1600, 900));
            Display.create();
            GL11.glMatrixMode(GL11.GL_PROJECTION);
            GL11.glLoadIdentity();
            GLU.gluPerspective(60f, 1600f / 900f, 3, 100000);
            GL11.glMatrixMode(GL11.GL_MODELVIEW);
            GL11.glLoadIdentity();
            GL11.glEnable(GL11.GL_FOG);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            initFog();
            initParticles();
        } catch (LWJGLException e) {
            Display.destroy();
            System.exit(1);
        }
    }
    
    .

    Вызывается из функции обновления внутри основного цикла Параметр угла - это направление области просмотра на оси Y и YCPOS - это значение между -1 и 1, которое я использую для поиска вверх или вниз.

        GL11.glLoadIdentity();
        GLU.gluLookAt(xpos, ypos, zpos, xpos + (float)Math.cos(angle), ypos+ yCpos, zpos+ (float)Math.sin(angle), 0, 1, 0);
    
    .

Это было полезно?

Решение

Я рисовал землю одним гигантским квадроциклом, и теперь я рисую землю плитками, и проблема больше не происходит.Следовательно, причина остается загадочной, но проблема решена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top