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

Aktuelle Zeit: Sa Jul 12, 2025 23:13

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: korrekte lens flares
BeitragVerfasst: Do Nov 09, 2006 17:54 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hi, ich hab grad mit nem kleinen lens flare angefangen, es gibt 3 halos und eine glow textur, aber das ganze gefällt mir noch net so ganz, zumal gefällt mir der code net so, die berechnung für die einzelnen elemete stimmt auch nicht, denn normalweise sind alle flares übereinander, wenn sich die sonne auf dem bildschirm mittelpunkt befindet. und dann muss ich noch prüfen ob die sonne verdeckt ist, so weit erstmal:
Code:
  1.  
  2. procedure TMainForm.LensFlare;
  3. var
  4.   x, y, z: GLDouble;
  5.   viewport: TGLVectori4;
  6.   modelview: TGLMatrixd4;
  7.   projection: TGLMatrixd4;
  8.   sun,
  9.   center,
  10.   direction: TVector3D;
  11.   distance,
  12.   scale: single;
  13.   i: integer;
  14. begin
  15.   glGetDoublev(GL_MODELVIEW_MATRIX, @modelview);
  16.   glGetDoublev(GL_PROJECTION_MATRIX, @projection);
  17.   glGetIntegerv(GL_VIEWPORT, @viewport);
  18.   gluProject(light_position[0], light_position[1], light_position[2],
  19.              modelview, projection, viewport,
  20.              @x, @y, @z);
  21.   sun := to_v3d(x, y, 0);
  22.   if not ((sun.x >= 0) and (sun.x <= 640) and
  23.      ((480 - sun.y) >= 0) and ((480 - sun.y) <= 480)) then
  24.        exit;
  25.   center := to_v3d(clientwidth / 2, clientheight / 2, 0);
  26.   direction := v3d_normalize(v3d_sub(center, sun));
  27.  
  28.   glMatrixMode(GL_PROJECTION);
  29.   glLoadIdentity;
  30.   glOrtho(0, 640, 480, 0, -1, 1);
  31.   glDisable(GL_LIGHTING);
  32.   glDisable(GL_DEPTH_TEST);
  33.   glMatrixMode(GL_MODELVIEW);
  34.   glLoadIdentity;
  35.  
  36.   glEnable(GL_BLEND);
  37.   glBlendFunc(GL_ONE, GL_ONE);
  38.   glDepthFunc(GL_ALWAYS);
  39.   glColor4f(1, 1, 1, 0.5);
  40.  
  41.   scale := 1;
  42.   distance := 0;
  43.  
  44.   for i := 1 to 7 do
  45.   begin
  46.     if ((i mod 2) <> 0) then
  47.       glBindTexture(GL_TEXTURE_2D, lens1) else
  48.       case i of
  49.         2: glBindTexture(GL_TEXTURE_2D, lens2);
  50.         4: glBindTexture(GL_TEXTURE_2D, lens3);
  51.         6: glBindTexture(GL_TEXTURE_2D, lens4);
  52.       end;
  53.  
  54.     case i of
  55.       2: scale := 0.5;
  56.       3: scale := 0.75;
  57.       5: scale := 0.5;
  58.       6: scale := 0.25;
  59.     end;
  60.  
  61.     glPushMatrix;
  62.       glTranslatef(sun.x + direction.x * distance, 480 - (sun.y + direction.y * distance), 0);
  63.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  64.       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  65.       glBegin(GL_QUADS);
  66.         glTexCoord2f(0, 0); glVertex3f(-80 * scale,  80 * scale, 0);
  67.         glTexCoord2f(0, 1); glVertex3f( 80 * scale,  80 * scale, 0);
  68.         glTexCoord2f(1, 1); glVertex3f( 80 * scale, -80 * scale, 0);
  69.         glTexCoord2f(1, 0); glVertex3f(-80 * scale, -80 * scale, 0);
  70.       glEnd;
  71.     glPopMatrix;
  72.  
  73.     if ((i mod 2) <> 0) then
  74.       distance := (distance + sqrt(640 * 640 + 480 * 480) / 7) else
  75.         distance := (distance + sqrt(640 * 640 + 480 * 480) / 7) / 1.5;
  76.   end;
  77. end;
  78.  


vielen dank schonmal, mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 09, 2006 19:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Zeig mal, wie es jetzt aussieht. So gut bin ich in OpenGL noch nicht, dass ich aus dem Code die fertige Szene sehen kann (siehe Matrix: "Irgendwann siehst du den Code nicht mehr, Neo. Ich sehe nur noch Blonde, Brünette, Schwarzhaarige")

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 09, 2006 19:29 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
naja es sieht gut aus, aber in der bewegung stimmt es noch net ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 10, 2006 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Es ist von der Linsenkrümmung und von dem Lichtschutz abhängig.
Lens Flare treten ja nur bei Linsen auf, auch nur bei billigeren und deswegen ist es auch in vielen Spielen ein Physikalischer Fehler(verkauft sich aber besser :twisted: sowie depth of view, bloom, blur). Eine direkte Formel kann ich dir nicht bieten aber ein paar Infos.
http://www.cambridgeincolour.com/tutorials/lens-flare.htm
http://www.cambridgeincolour.com/tutorials.htm
http://de.wikipedia.org/wiki/Lens_Flare
Die beste realisierung bekommst du mit Shadern hin, da du ja noch zum LensFlare den Kontrast des ganzen Bildes anpassen musst.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 10, 2006 15:16 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich will das ja nicht exakt machen, es soll halt nur so sein wie in den meisten games, darf aber schon schick aussehen ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 12, 2006 11:29 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
das problem ist ja auch dass ich sonnenlicht habe und deshalb keine wirkliche position, man die position der sonne aber in der skybox sieht und das nicht übereinstimmt wenn ich das so mache :(

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 12, 2006 11:46 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
TAK2004 hat geschrieben:
Lens Flare treten ja nur bei Linsen auf, auch nur bei billigeren

Das ist leider so nicht richtig. Auch die besten Objektive brauchen einen blendschutz, sonst gibts flares (Ganz besonders Tele Objektive). Ein gutes Objektiv sollte zwar deutlich weniger dazu neigen, aber trotzdem zeigen auch diese flares, wenn man das objektiv richtig ins licht hält - und manchmal ist das ja auch erwünscht. Übrigens ist es sogar so, daß man bei teuten Objektiven häufig sogar mehr Flares sehen kann als bei billigen, weil diese mehr linsen haben und anhand der Flares kann man im richtigen Licht die Anzahl der Linsen ablesen - häufig werden so nämlich alle Linsen sichtbar. Interessanterweise kann man auch die Qualität des Objektivs anhand eines gut sichtbaren Flares erkennen, selbst wenn nur ein Flare gut zu erkennen ist - gute Objektive haben nämlich eine fast runde Blende. Entsprechend erscheinen die Flares rund. Billigst Objektive haben so wenige Blendenlammelen, daß man sie wunderbar anhand Hexagonal geformter Flares erkennen kann ;-) Wenn man aber nur so ein lustig verwaschenes und wildes geflare am Bildrand hat, dann kann man daran aber nicht erkennen, wie gut das Objektiv ist, höchstens daß hier definitiv kein Blendschutz im Einsatz war. Woran man aber viele gute Objektive erkennen kann ist: Senkrechte und Waagrechte Linien sind wirklich gerade und nicht gebogen - und bei Zooms sollte das völlig unabhängig von der Zoomstufe sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 14:04 
Offline
DGL Member

Registriert: Sa Sep 30, 2006 03:11
Beiträge: 3
hallo,

mein problem bei den Lens Flares is, das ich sie erst gar nicht sehe. Ich habe AutoZTest = False und FlareIsNotOccluded = True gesetzt, sodass ich sie während der Designzeit sehe, aber nicht bei der Laufzeit!

Muss ich da noch anderen Optionen verändern?

danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
hiho

Auf Delphi3d.net gibt es in der Downloads sektion (Special effects) ein beispiel für Lensflares. Ich finde das ergebnis durchaus sehr angenehm, vielleicht kannste dir da was abschauen.

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: Do Sep 27, 2007 08:18 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Also ich finde diese Flares bei Spielen grauenvoll. Irgendjemand hat damit mal angefangen und jetzt müssens alle, weils sonst nicht 'cool' oder 'hip' ist.
Diese Flares mögen bei einem Weltraumshooter noch Sinn machen (aber auch hier nur in einer 3rd person Ansicht), aber bei Fantasy und Konsorten ruinieren sie einfach das Gesamtspielerlebnis. Man wird einfach aus der Szene entfernt und zum Beobachter, weil man ja durch ein Objektiv blickt.
Das menschliche Auge hat keine Flares hier wird dann das Bild 'übersteuert', sprich zu Hell, um was zu sehen. Ist in Gothic recht gut gelöst.

Ich würde die Dinger in der ersten Person auf jedenfall abschaltbar machen.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 27, 2007 10:50 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Sidorion hat geschrieben:
Also ich finde diese Flares bei Spielen grauenvoll. Irgendjemand hat damit mal angefangen und jetzt müssens alle, weils sonst nicht 'cool' oder 'hip' ist.
Diese Flares mögen bei einem Weltraumshooter noch Sinn machen (aber auch hier nur in einer 3rd person Ansicht), aber bei Fantasy und Konsorten ruinieren sie einfach das Gesamtspielerlebnis. Man wird einfach aus der Szene entfernt und zum Beobachter, weil man ja durch ein Objektiv blickt.
Das menschliche Auge hat keine Flares hier wird dann das Bild 'übersteuert', sprich zu Hell, um was zu sehen. Ist in Gothic recht gut gelöst.

Ich würde die Dinger in der ersten Person auf jedenfall abschaltbar machen.


Stimme ich durchaus zu. Im Weltraumshooter sollten sie aber auf jeden fall drin sein( Was schon ne sonne ohne Lens Flare ), allerdings sind sie auch hier nicht korrekt( Oder schaut man neuerdings durch Objektive wenn man im Schiff sitzt ).

Allerdings glaube ich das wir atm zimlich Off-Topic sind, also bitte b.t.t.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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 ]