# [JOGL] Freibewegliche Lichtquelle im Raum



## Daniel.S (16. Aug 2011)

Hallo 
Ich bin neu hier im Forum. 
Habe auch direkt ein anliegen (hoffe mal es gibt nicht schon einige Threads, hab nur einen mit GLOW-Effekt gefunden, was für meine Kentnisse aber noch etwas Overkill wäre).

Ich programmiere derzeit ab und zu an einem 3D Universum. Es funktioniert auch alles schon ganz gut.
(Freie Kamera-Steuerung, die Berechnung der Bahnen mittels Gravitationsalgorithmen). 
Nur was die Beleuchtung angeht grummelt es mir noch im Magen:

Wie bekomme ich es hin, dass unabhängig vom Betrachter eine Lichtquelle von der Sonne ausgeht und die Planeten nur an der Sonnen zugewandten Seite beleuchtet wird?
Wenn jemand ein kleines Beispielprogramm bereit hätte, würde mir das sicherlich sehr helfen 

EDIT: Habs selbst hinbekommen. War irgendwie doch nur ein 3 Zeiler.


----------



## Marco13 (16. Aug 2011)

Die Lösung zu Posten ist in so einem Fall aber meistens nicht verkehrt. Erstens, um anderen zu helfen, und zweitens, weil man dann gesagt bekommen kann, wie man es besser machen könnte


----------



## Kr0e (16. Aug 2011)

Ja, das stimmt. Wie oft suche ich mal bei Google was, finde in Foren etwas und dann sagt der Threadersteller "Habs hin bekommen" aber keine Lösung gepostet.


----------



## Daniel.S (16. Aug 2011)

Kommt schon, sorry war heute mittag in Eile.
Also, einfach in der Init-Methode die "normalen" Grundeinstellungen vornehmen, wie sie immer
gelten sollen (nach belieben):

```
// In der Init-Methode
	        gl.glEnable(GLLightingFunc.GL_LIGHTING);
	        gl.glEnable(GLLightingFunc.GL_LIGHT0);
	        gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_DIFFUSE, colorWhite, 0);
	        gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_AMBIENT, colorBlack, 0);
```

Dann, der wichtige Part, die weiteren Einstellungen nicht auch in der Init-Methode sondern in der Display() Methode, wo ja dann gerendert wird:


```
//In der Display-Methode
               gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
	        gl.glMatrixMode(GL2.GL_MODELVIEW);
	        gl.glLoadIdentity();
        //.....
             gl.glPushMatrix(); //Aktuelle Matrix sichern
	        	gl.glTranslatef(0.0f, 0.0f, 0.0f);   //Lichtquelle dahinschieben, wo es beliebt
	        	gl.glLightf(GL2.GL_LIGHT0, GL2.GL_CONSTANT_ATTENUATION, 0.4f); //Abschwächungsfaktor
	        	gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, lightPos, 0);
	       gl.glPopMatrix();   //Alte Matrix wiederherstellen
```

Eine weitere Frage hab ich direkt: It es möglich Objekte zum Leuchten zu bringen ausser dem Glow-Effekt? Muss auch nicht stark sein. Kann zwar nur die Sonne mit Ambienten Licht etc. beleuchten, dass sieht aber nur mäßig gut aus. Jemand ne Idee?


----------



## Guest2 (18. Aug 2011)

Moin,



Daniel.S hat gesagt.:


> Eine weitere Frage hab ich direkt: It es möglich Objekte zum Leuchten zu bringen ausser dem Glow-Effekt? Muss auch nicht stark sein. Kann zwar nur die Sonne mit Ambienten Licht etc. beleuchten, dass sieht aber nur mäßig gut aus. Jemand ne Idee?



was genau meinst Du den mit "zum Leuchten bringen"?

Wenn Du nur die Materialeigenschaften beeinflussen willst, dann sieh Dir mal glMaterial an. (Beispielwerte)

Wenn die Objekte wirklich flächig selbst leuchten sollen und dabei auch andere Objekte beleuchten sollen, dann nein, zumindest einfach geht das nicht. 

Gruß,
Fancy


----------

