0

さて、「スカイボックス」を作成しました (テクスチャが異なるため、実際には 5 面です)。正常に動作していますが、雷に問題があります。それは OpenGL の私の強みではないので、答えがそれほど難しくなくても驚かないでしょう。

これが私の開始位置ビューです。ご覧のように正面は明るいのですが、左、上、右はあまり明るくなく、正面との境界があります。

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

スカイボックスの絶対中心(ほぼ)に行くと、境界線はあまり見えません(絶対中心には境界線がないと思います.

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

最初に、これらの設定で位置 (0,0,0) で 1 つのライトを試してみましたが、何もしませんでした。アンビエント、ディフューズを変更しようとしましたが、実際には役に立ちませんでした:

    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);
4

1 に答える 1

2

答えはそれほど難しいものではありません。スカイボックスで照明をまったく使用しないでください。

于 2011-10-22T09:48:17.390 に答える