Java OpenGL,灯光设置

时间:2018-04-08 11:27:14

标签: java opengl graphics jogl

我在Java OpenGL(JOGL)中建模3D迷宫,我正面临着关于灯光的问题。无论我多么努力,我都不会按照我想要的方式行事。

这是在init方法中设置的(在创建窗口时调用):

    // nastaveni materialu - difusni slozka
    float[] mat_dif = new float[] { 0.3f, 0.3f, 0.3f, 0.3f };
    // nastaveni materialu - zrcadlova slozka
    float[] mat_spec = new float[] { 1, 1, 1, 1 };
    // nastaveni materialu - ambientni slozka
    float[] mat_amb = new float[] { 0.3f, 0.3f, 0.3f, 0.3f };

    gl.glMaterialfv(GL2.GL_FRONT, GL2.GL_AMBIENT, mat_amb, 0);
    gl.glMaterialfv(GL2.GL_FRONT, GL2.GL_DIFFUSE, mat_dif, 0);
    gl.glMaterialfv(GL2.GL_FRONT, GL2.GL_SPECULAR, mat_spec, 0);


//nastaveni bileho svetla
float[] lightWhite = new float[] { 1, 1, 1, 1 };
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT_AND_DIFFUSE, lightWhite, 0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, lightWhite, 0);

//nastaveni cerveneho
float[] lightRed = new float[] { 1, 0, 0, 1 };
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_AMBIENT_AND_DIFFUSE, lightRed, 0);
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_SPECULAR, lightRed, 0);

//nastaveni modreho
float[] lightBlue = new float[] { 0, 0, 1, 1 };
gl.glLightfv(GL2.GL_LIGHT2, GL2.GL_AMBIENT_AND_DIFFUSE, lightBlue, 0);
gl.glLightfv(GL2.GL_LIGHT2, GL2.GL_SPECULAR, lightBlue, 0);

和display方法中的代码(每个帧渲染时调用)

        gl.glMatrixMode(GL2.GL_MODELVIEW);
    gl.glLoadIdentity();

    light_position = new float[] {6.0f, 2.0f, -6.0f, 1.0f};// bod v prostoru
    light_direction = new float[] {0.0f, 0.0f, -6.0f, 0.0f};

    light_position2 = new float[] {8.0f, 2.0f, -7.0f, 1.0f};// bod v prostoru
    light_direction2 = new float[] {15.0f, 0.0f, -7.0f, 0.0f};

    light_position3 = new float[] {8.0f, 2.0f, -4.0f, 1.0f};// bod v prostoru
    light_direction3 = new float[] {8.0f, 0.0f, 0.0f, 0.0f};

    gl.glPushMatrix();
    gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, light_position, 0);
    gl.glLightf(GL2.GL_LIGHT0,GL2.GL_SPOT_CUTOFF,60.0f);
    gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPOT_DIRECTION, light_direction, 0);
    gl.glLightf(GL2.GL_LIGHT0,GL2.GL_SPOT_EXPONENT,10.0f);
    gl.glPopMatrix();

    gl.glPushMatrix();
    gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, light_position2, 0);
    gl.glLightf(GL2.GL_LIGHT1,GL2.GL_SPOT_CUTOFF,60.0f);
    gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_SPOT_DIRECTION, light_direction2, 0);
    gl.glLightf(GL2.GL_LIGHT1,GL2.GL_SPOT_EXPONENT,10.0f);
    gl.glPopMatrix();

    gl.glPushMatrix();
    gl.glLightfv(GL2.GL_LIGHT2, GL2.GL_POSITION, light_position3, 0);
    gl.glLightf(GL2.GL_LIGHT2,GL2.GL_SPOT_CUTOFF,35.0f);
    gl.glLightfv(GL2.GL_LIGHT2, GL2.GL_SPOT_DIRECTION, light_direction3, 0);
    gl.glLightf(GL2.GL_LIGHT2,GL2.GL_SPOT_EXPONENT,10.0f);
    gl.glPopMatrix();

    gl.glColorMaterial (GL2.GL_FRONT_AND_BACK, 
    GL2.GL_AMBIENT_AND_DIFFUSE ) ;
    gl.glEnable(GL2.GL_COLOR_MATERIAL);

    gl.glEnable(GL2.GL_LIGHTING);
    gl.glEnable(GL2.GL_LIGHT0);
    gl.glEnable(GL2.GL_LIGHT1);
    gl.glEnable(GL2.GL_LIGHT2);

    gl.glShadeModel(GL2.GL_SMOOTH);

为了更好地修改,有一张图片

enter image description here

在此代码之后,一切都是黑暗的,没有光。 非常感谢您的参与。 :)

0 个答案:

没有答案