移动或旋转相机时,OpenGL雾效果会发生变化

时间:2014-02-27 08:30:28

标签: opengl fog

我想在一个小小的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);
        }
    }
    

    从主循环内的updatePosition函数调用 angle参数是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);
    

1 个答案:

答案 0 :(得分:1)

我正在用一个巨大的四边形画地面,现在我用瓷砖画地面,问题不再发生了。因此,原因仍然是神秘的,但问题已经解决了。

相关问题