Android OpenGL天空盒灯没有真正起作用

时间:2011-10-21 17:12:13

标签: android opengl-es light

好吧,我制作了一个“天空盒”(它实际上是5个平面,因为纹理不同)。它工作正常,但闪电有问题。这不是我在OpenGL中的最强点,所以如果答案不那么难,我也不会感到惊讶。

这是我的起始位置视图。正如你所看到的那样,前平面是明亮的,但是左,上,右并不是真的,它们和前面之间有一个边界。

http://img696.imageshack.us/img696/3673/light01.png

当我去天空盒的绝对中心(差不多)时,边界不是那么明显(我猜绝对中心没有边界。

http://img233.imageshack.us/img233/2949/light02.png

首先,我尝试使用这些设置在posistion(0,0,0)处使用一个灯,但没有,我试图改变环境,漫反射,但不是真的有帮助:

    private float[] lightAmbient = {0.5f, 0.5f, 0.5f, 1.0f};
    private float[] lightDiffuse = {1.0f, 1.0f, 1.0f, 1.0f};
    private float[] lightPosition = {0.0f, 0.0f, 0.0f, 1.0f};

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            gl.glEnable(GL10.GL_DITHER);
            gl.glEnable(GL10.GL_TEXTURE_2D);
            gl.glShadeModel(GL10.GL_SMOOTH);
            gl.glClearColor(0, 0, 0, 0);

            gl.glClearDepthf(1.0f);
            gl.glEnable(GL10.GL_DEPTH_TEST);
            gl.glDepthFunc(GL10.GL_LEQUAL);
            gl.glEnable(GL10.GL_LIGHT0);
            gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
            gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbientBuffer);
            gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuseBuffer);
            gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPositionBuffer);
    }

    public void onDrawFrame(GL10 gl) {
            gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
            gl.glLoadIdentity();
            gl.glEnable(GL10.GL_LIGHTING);

            GLU.gluLookAt(gl, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, 0.0f, 1.0f, 0.0f);
    }

    public void onSurfaceChanged(GL10 gl, int width, int height) {
            if(height == 0) {
                height = 1;                         
            }

            gl.glViewport(0, 0, width, height);
            gl.glMatrixMode(GL10.GL_PROJECTION);
            gl.glLoadIdentity();
            GLU.gluPerspective(gl, 65.0f, (float)width / (float)height, 1.0f, 80.0f);
            gl.glMatrixMode(GL10.GL_MODELVIEW);
            gl.glLoadIdentity();
    }

所以问题是如何让它在我所在的每个地方都能发挥作用。我希望有人可以帮助我,因为现在它看起来并不好看(没有光线很好,但我真的不想要一个夜景,特别是有太阳的纹理)。

编辑(现在如何运作):因为它在答案中已经没有了天空盒的法线,但是在我启用了闪电之后我需要将这一行添加到代码中,现在它就像一个魅力,到处都是天空。

    gl.glLightModelf(GL10.GL_LIGHT_MODEL_TWO_SIDE, GL10.GL_TRUE);

1 个答案:

答案 0 :(得分:2)

答案确实不那么难;你根本不应该在天空盒上使用灯光。