Ich habe 5 Würfel und diese möchte ich mit einem Spotlicht "markieren".
Das heisst ich drücke die Taste "1" dann soll ein Spotlicht auf den Würfel 1 fallen. Drücke ich wieder "1" soll das Spotlich deaktivert werden.
Dies möchte ich mit allen 5 Würfeln umsetzen. Leider verstehe ich nicht warum mein unten gezeigter Source Code nicht funktioniert (gl.glDisable(GL_LIGHT1); ) fehlt noch, müsste meines Erachtens bei
if (lockedWuerfel[0]1=1){gl.glDisable(GL_LIGHT1);} mit rein, leider funktioniert ja noch nichtmal das ich alle 5 Würfel mit Spotlicht beleuchten kann. :-(
Das heisst ich drücke die Taste "1" dann soll ein Spotlicht auf den Würfel 1 fallen. Drücke ich wieder "1" soll das Spotlich deaktivert werden.
Dies möchte ich mit allen 5 Würfeln umsetzen. Leider verstehe ich nicht warum mein unten gezeigter Source Code nicht funktioniert (gl.glDisable(GL_LIGHT1); ) fehlt noch, müsste meines Erachtens bei
if (lockedWuerfel[0]1=1){gl.glDisable(GL_LIGHT1);} mit rein, leider funktioniert ja noch nichtmal das ich alle 5 Würfel mit Spotlicht beleuchten kann. :-(
Code:
public void init(GLAutoDrawable drawable){
gl.glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
gl.glEnable(GL_LIGHTING);
gl.glLightModelfv(GL_LIGHT_MODEL_AMBIENT, FloatBuffer.wrap(new float[] { 1.0f,1.0f, 1.0f, 1}));
gl.glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, FloatBuffer.wrap(new float[] { 1.0f }));
// Lichtquelle aktivieren
gl.glEnable(GL_NORMALIZE); // Normalisiert das Licht
gl.glEnable(GL_LIGHT2); // Normalisiert das Licht
// Licht 1
gl.glLightfv(GL_LIGHT1, GL_POSITION, FloatBuffer.wrap(new float[] { 0,0,4 ,1 })); // Punkt
gl.glLightfv(GL_LIGHT1, GL_AMBIENT, FloatBuffer.wrap(new float[] { 1.0f, 1.0f, 1.0f, 1} ));
gl.glLightfv(GL_LIGHT1, GL_DIFFUSE, FloatBuffer.wrap(new float[] { 1.0f, 1.0f, 1.0f, 1} ));
gl.glLightfv(GL_LIGHT1, GL_SPECULAR, FloatBuffer.wrap(new float[] { 1.0f, 1.0f, 1.0f, 1}));
gl.glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 0 );
gl.glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 4.5f);
gl.glLightfv(GL.GL_LIGHT2, GL.GL_POSITION, FloatBuffer.wrap( new float[] { 5.0f, -4.0f, 5.0f, 1.0f}));
gl.glLightfv(GL.GL_LIGHT2, GL.GL_AMBIENT, FloatBuffer.wrap(new float[]{1,1,1, 1f}));
gl.glLightfv(GL.GL_LIGHT2, GL.GL_DIFFUSE, FloatBuffer.wrap(new float[] { 1, 1,1, 1f }));
gl.glLightfv(GL.GL_LIGHT2, GL.GL_SPECULAR, FloatBuffer.wrap(new float[] {1, 1, 1, 1f }));
}
Code:
private void drawScene(GL gl, boolean select){
gl.glEnable(GL.GL_LIGHT1);
if (lockedWuerfel[0]==1){
light_x = -2.65f;//links rechts
light_y = -0.76f;//oben unten
}
else if(lockedWuerfel[1]==1){
light_x = -1.6f;//links rechts
light_y = 0.50f;//oben unten
}
else if(lockedWuerfel[2]==1){
light_x = -0.5f;//links rechts
light_y = -0.76f;//oben unten
}
else if(lockedWuerfel[3]==1){
light_x = 0.65f;//links rechts
light_y = 0.50f;//oben unten
}
else if(lockedWuerfel[4]==1){
light_x = 1.75f;//links rechts
light_y = -0.76f;//oben unten
}
gl.glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, FloatBuffer.wrap(new float[] { light_x,light_y,light_z, 1 })); // Punkt
}
Code:
public void keyPressed(KeyEvent evt) {
//markieren der Würfel zum späteren selektieren der Auswahl
if (evt.getKeyCode() == KeyEvent.VK_1) {
if (lockedWuerfel[0]==1)
{
lockedWuerfel[0]=-1;
}
else
{
lockedWuerfel[0]=1;
}
}
if (evt.getKeyCode() == KeyEvent.VK_2) {
if (lockedWuerfel[1]==1)
{
lockedWuerfel[1]=-1;
}
else
{
lockedWuerfel[1]=1;
}
}
if (evt.getKeyCode() == KeyEvent.VK_3) {
if (lockedWuerfel[2]==1)
{
lockedWuerfel[2]=-1;
}
else
{
lockedWuerfel[2]=1;
}
}
if (evt.getKeyCode() == KeyEvent.VK_4) {
if (lockedWuerfel[3]==1)
{
lockedWuerfel[3]=-1;
}
else
{
lockedWuerfel[3]=1;
}
}
if (evt.getKeyCode() == KeyEvent.VK_5) {
if (lockedWuerfel[4]==1)
{
lockedWuerfel[4]=-1;
}
else
{
lockedWuerfel[4]=1;
}
}
}