我在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);
为了更好地修改,有一张图片
在此代码之后,一切都是黑暗的,没有光。 非常感谢您的参与。 :)