Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 12:50

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Tödliches Licht
BeitragVerfasst: Mi Nov 07, 2007 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Hi,

ich möchte bei einem Sonnensystem der Sonne die Lichtquelle verpassen.
1. Das Licht wäre, wenn es so aussehen würde wahrscheinlich ein ziemlich gefährlicher "Stoff": Grüne Strahlen. Liegt das an irgendeinem glColor, das ich irgendwo gesetzt habe oder am Lichtcode ?
2. Alleine theoretisch gesehen habe ich hier Schwierigkeiten: Wenn die Sonne auf 0,0,0 liegt, wie soll ich ihr dann in alle Richtungen (die Erde kreist eben doch um die Sonne!) die Lichtquelle verpassen ? Hinzu kommt noch, dass laut dem Wiki der Standard von Diffuse 1.0, 1.0, 1.0, 1.0 und von der Position 0.0, 0.0, 0.0, 1.0 ist. Wenn ich das einbaue, sind alle Planeten Dunkelgrün (=kein Licht). Liegt das etwa daran, dass die Lichtquelle sozusagen in der Sonne steckt und das Licht nicht rauskommt, denn wenn ich die Lichtquelle verschiebe, gibt es Licht ? Dann ist allerdings die Sonne nicht mehr wirklich die Lichtquelle. Habe ich etwas komplett falsch verstanden ? Was mache ich falsch ?

Code:
  1.  
  2.   const light0Ambient  : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  3.         light0Diffuse  : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  4.         light0Specular : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  5.         light0Position : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  6.   begin
  7.     glLightfv(GL_LIGHT0, GL_AMBIENT , @light0Ambient);
  8.     glLightfv(GL_LIGHT0, GL_DIFFUSE , @light0Diffuse);
  9.     glLightfv(GL_LIGHT0, GL_SPECULAR, @light0Specular);
  10.     glLightfv(GL_LIGHT0, GL_POSITION, @light0Position);
  11.  
  12.     glEnable(GL_LIGHTING);
  13.     glEnable(GL_LIGHT0);
  14.     glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
  15.     glEnable(GL_COLOR_MATERIAL);
  16.   end;
  17.  

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tödliches Licht
BeitragVerfasst: Mi Nov 07, 2007 18:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nils hat geschrieben:
Liegt das etwa daran, dass die Lichtquelle sozusagen in der Sonne steckt und das Licht nicht rauskommt, denn wenn ich die Lichtquelle verschiebe, gibt es Licht ?

Nein, OpenGL erstellt von Haus aus keine Schatten.

Nils hat geschrieben:
Wenn die Sonne auf 0,0,0 liegt, wie soll ich ihr dann in alle Richtungen (die Erde kreist eben doch um die Sonne!) die Lichtquelle verpassen ?

Versuchs mal mit nem Punktlicht, das sollte deine Bedürfnisse abdecken.

Desweiteren brauchst du, soweit ich weiss, Materialen für die Planeten. Hast du schonmal das Tutorial zum Thema Licht gelesen? (Tutorial_Lektion_8).

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 07, 2007 18:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Das Tutorial habe ich schon gelesen. Hat mir abgesehen von den Parametern leider nicht so viel gebracht.
Mir fiel gerade auf, dass ich in DrawSphere noch das stehen hatte:
Code:
  1.  
  2.   glMaterialfv(GL_FRONT, GL_AMBIENT  , @matAmb);
  3.   glMaterialfv(GL_FRONT, GL_DIFFUSE  , @matDif);
  4.   glMaterialfv(GL_FRONT, GL_SPECULAR , @matSpec);
  5.   glMaterialfv(GL_FRONT, GL_EMISSION , @matEm);
  6.   glMaterialfv(GL_FRONT, GL_SHININESS, @shininess);
  7.  

Seitdem das draußen ist, sehen die Planeten einfach schöner aus. Wie kann man sich die Materialien denn berechnen ? Die Sonne scheint momentan übrigens scheinbar eine ganz geringe Leuchtkraft zu haben.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 08, 2007 20:38 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Leuchtkraft der standard Lichtquelle sollte eigentlich ziemlich gut (maximal) sein, denn es ist keine Abschwächung (Attenuation) eingestellt wie man hier lesen kann: glLight

Gib mal mehr Code. Alles was mit Licht und Materialien zu tun hat.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 08, 2007 20:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Ok:

Code:
  1.  
  2.   type
  3.     Tvec4f  = Array[0..3] of Real;
  4.     pTvec4f = ^Tvec4f;
  5.  
  6. ...
  7.  
  8. const
  9.   matAmb1  : TVec4f = (0.7 , 0.53 , 0.3 , 1.0);
  10.   matDif1  : TVec4f = (1.76, 0.57 , 0.16, 1.0);
  11.   //matSpec1 : TVec4f = (1.0 , 0.15 , 0.0 , 1.0);
  12.   matSpec1 : TVec4f = (0.0 , 0.0 , 0.0 , 0.0);
  13.   matEm1   : TVec4f = (0.75, 0.588, 0.0 , 1.0);
  14.  
  15.   matAmb2  : TVec4f = (0.1, 0.1 , 0.2, 1.0);
  16.   matDif2  : TVec4f = (0.4, 0.74, 0.7, 1.0);
  17.  // matSpec2 : TVec4f = (1.0, 0.8 , 0.7, 1.0);
  18.   matSpec2 : TVec4f = (0.0, 0.0 , 0.0, 0.0);
  19.   matEm2   : TVec4f = (0.0, 0.0 , 0.0, 1.0);
  20.  
  21.   matAmb3  : TVec4f = (0.2, 0.2, 0.25, 1.0);
  22.   matDif3  : TVec4f = (0.8, 0.8, 0.95, 1.0);
  23.   //matSpec3 : TVec4f = (0.3, 0.3, 1.0 , 1.0);
  24.   matSpec3 : TVec4f = (0.0, 0.0, 0.0 , 0.0);
  25.   matEm3   : TVec4f = (0.0, 0.0, 0.0 , 1.0);
  26.  
  27. procedure InitLights;
  28. const light0Ambient  : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  29.       light0Diffuse  : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  30.       light0Specular : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  31.       light0Position : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 1.0);
  32. begin
  33.   glLightfv(GL_LIGHT0, GL_AMBIENT , @light0Ambient);
  34.   glLightfv(GL_LIGHT0, GL_DIFFUSE , @light0Diffuse);
  35.   glLightfv(GL_LIGHT0, GL_SPECULAR, @light0Specular);
  36.   glLightfv(GL_LIGHT0, GL_POSITION, @light0Position);
  37.   glEnable(GL_LIGHTING);
  38.   glEnable(GL_LIGHT0);
  39.   glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
  40.   glEnable(GL_COLOR_MATERIAL);
  41. end;
  42.  
  43. // Ist eigentlich zu viel Code, aber besser als zu wenig:
  44. procedure TRazor.DrawSphere(AngleX, Radius: Real; Position: pTVec3f; TexID: Byte; matAmb: TVec4f; matDif: TVec4f; matSpec: TVec4f; matEm: TVec4f; shininess: Real);
  45. var Sphere : pGLUquadricObj;
  46. begin
  47.   glPushMatrix;
  48.   glTranslatef(Position[0], Position[1], Position[2]);
  49.   glRotatef(AngleX, 0.0, 0.0, 1.0);
  50.  // glMaterialfv(GL_FRONT, GL_AMBIENT  , @matAmb);
  51.   glMaterialfv(GL_FRONT, GL_DIFFUSE  , @matDif);
  52.   glMaterialfv(GL_FRONT, GL_SPECULAR , @matSpec);
  53.  // glMaterialfv(GL_FRONT, GL_EMISSION , @matEm);
  54.  // glMaterialfv(GL_FRONT, GL_SHININESS, @shininess);
  55.   Sphere := gluNewQuadric;
  56.   gluQuadricOrientation(Sphere, GLU_OUTSIDE);
  57.   gluQuadricNormals(Sphere, GLU_SMOOTH);
  58.   gluQuadricTexture(Sphere, True);
  59.  
  60.   if TexID > 0 then
  61.   begin
  62.     glEnable(GL_TEXTURE_2D);
  63.     glBindTexture(GL_TEXTURE_2D, TexID);
  64.   end;
  65.   gluSphere(Sphere, Radius, 20, 20);
  66.   gluDeleteQuadric(Sphere);
  67.   if glIsEnabled(GL_TEXTURE_2D) then
  68.     glDisable(GL_TEXTURE_2D);
  69.   glPopMatrix;
  70. end;
  71.  


Den ganzen Tag kamen hier regelrecht nirgends Antworten, aber plötzlich hast du in gerade Linie zugeschlagen :mrgreen:

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 17:20 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
unwichtig


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 23:30 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Rot - nicht grün. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 11:55 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
fehler


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:29, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 21, 2007 19:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Ich möchte aber einfach nur realistisches Licht, wie könnte man das denn einfach realisieren ?

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 21, 2007 22:43 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Beschreib mal was dir fehlt. Das OpenGL Licht ist (ohne PerPixel-Lightning welches nicht ganz so einfach zu erreichen ist) nicht 100% korrekt. Allerdings fällt es nicht alzu negativ auf. Ich denke einfach, dass du vielleicht beim Material was falsch eingestellt hast.

@Alle Andere: Wenn vielleicht jemand ein kleines Beleuchtungsbeispiel hat, könnte das auch nicht schaden.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 21, 2007 23:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Falls dir dein Licht nicht realistisch genug ist, weil die feste Funktionspipeline ja nur per-Vertex beleuchtet, sollte schon das "einfache" Umstellen auf Per-Pixel-Beleuchtung ein realistischeres Licht bringen. Das geht natürlich nur über Shader, aber für sowas gibt es z.B. von 3DLabs den Shadergen. Dieses Tool erstellt dir Shader die das Beleuchtungsmodell von OpenGL nachbilden (aber dann halt z.b. statt per-Vertex per-Pixel), ohne dass du dich großartig in Shader einarbeiten musst. Normalerweise würde ich Per-Pixel-Licht einem Einsteiger nicht direkt empfehlen, allerdings sind die von diesem Tool erstellten Shader auch eher zum Lernen gedacht (sprich : gut dokumentiert, evtl. etwas umständlicher, aber dafür verständlicher. Optimiert sind die Shader dann halt nicht), und mit dem Tool kann man schnell verschiedene Beleuchtungsmodelle ausprobieren. Evtl.lohnt es sich also einen Blick auf dieses Tool zu werfen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 22, 2007 17:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Nun Shader sind denke ich nicht nötig. Ich mache wohl einen Fehler entweder bei den Materialien oder beim setzen des Lichts. Ich denke wir kommen hier nicht weiter, wenn ihr es euch nicht direkt anschauen könnt. Hier ist die aktuelle Version:
http://rapidshare.com/files/71517997/So ... ar.gz.html

(Eure Dateigrößeneinschränkung ist nicht gerade schön...die paar KB kann man hier nicht hochladen)

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 08, 2007 12:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Ich habe von i0n0s den Hinweis über ICQ bekommen, dass die Lichter von der Kamera ausgingen. Ich habe InitLights nun nach dem Setzen der Kamera-Position stehen und es funktioniert einwandfrei. Danke für eure Bemühungen.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]