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

Aktuelle Zeit: Do Jul 17, 2025 13:48

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



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 08:56 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
Hallo,

Zum wechseln der Szenen wäred eines spiels ist es schöner eine art Fade to black einzufügen,

für alle die nicht wissen was das ist, das ist wenn der bildschirm langsam schwarz wird,

ich dachte an eine art globalen alpha channel oder soetwas, gibts da was sinnvolles das nicht umbedingt über 500 verschiedene texturen geht?

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Am Ende der Szene einfach im Orthomodus ein Vollbildquad ohne Textur in schwarz über die Szene legen (vorher Tiefentest deaktivieren bzw. auf GL_ALWAYS setzen) und dann mittels Zeitmessung den Alphawert ansteigen lassen. Ist der auf 1 Vorzeichen umdrehen und Alphawert wieder gegen Null streben lassen. So mach ich das in Projekt "W" auch.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 09:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Wenn man sonst den Orthomodus nicht verwendet, reicht es auch nur glDepthFunc(GL_ALWAYS); (wie SaschaWillems schon erklärt hat) zu setzen und dann im Perspektivmodus ein Quad zu zeichnen - so mache ich es.

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 14:22 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
ok ich hab das mal eingebaut, ich zeichne ein Quadrat welches mit der funktion glColor4f(0,0,0,Alpha); schwarz wird und einen Alphawert bekommt
ich hab den tiefentest so gestellt wie ihr gesagt habt, aber es wäre glaub ich gut (Auch wenn ich mich informiert habe was der parameter bedeutet) wenn mir das nochmal einer erklären könnt warum genau diese,

aber egal auf welchen wert ich Alpha setzte es kommt immer gleich ganz schwarz, hier mal mein code

Code:
procedure TFadeToBlack.Render;
begin
  if Aktive then begin
    Visible := true;
    if Alpha < 1 then Alpha := Alpha + 0.001;
  end else begin
    if Alpha > 0 then Alpha := Alpha -0.001
      else
        Visible := false;
  end;

  if Visible then begin
    glpushmatrix;
      glDepthFunc(GL_ALWAYS);
      glenable(GL_Blend);
        glBegin(GL_QUADS);
          glColor4f(0,0,0,Alpha);
          glVertex3f(0,0,Ebene);
          glColor4f(0,0,0,Alpha);
          glVertex3f(0,Height,Ebene);
          glColor4f(0,0,0,Alpha);
          glVertex3f(Width,Height,Ebene);
          glColor4f(0,0,0,Alpha);
          glVertex3f(Width,0,Ebene);
        glEnd;
      gldisable(gl_blend);
    glPopMatrix;
  end;
end;


Standartwerte sind
Visible = False
Aktiv = false
Alpha = 0

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 14:24 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Pack mal noch das mit hinter dein glEnable(GL_BLEND):

Code:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


Hier kannst du genau nachlesen was es damit auf sich hat :)
http://wiki.delphigl.com/index.php/Tutorial_Lektion_7

Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 14:25 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Setze mal noch die Blend Funktion folgendermaßen:

Code:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


Dann sollte es laufen.

// Zu langsam :-/.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 14:41 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
nein leider nicht, immernoch sobald ich es zeichnen lasse alles schwarz, hab auch schon überlegt ob es vieleicht zu schnell geht weil ich hab ja immernoch gute 500fps aber selbst bei einem wert von 0.00000000001 ist es sofort schwarz


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 14:48 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Wechselst du evlt in die Orthogonale Ansicht und dannach nicht zurück..?

Vom Code schaut das stück da oben sonst soweit richtig aus.. zur not lass dir mal die Werte von Alpha ausgeben etc.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Mi Apr 21, 2010 15:04 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
ja ich beginne in der gluPerspective und wechsle dann über glOrtho(0, MYOptionen.Aufloesung[1], MYOptionen.Aufloesung[2], 0, 4, 20); in den Ortho-modus
danach wird gerendert, dazuwischen kommt dann der 3D teil deswegen wechsle ich obwohl es noch sinnlos klingt

und den alpha wert mal ausgeben lassen sagst du, hm ok ich wed mal sehen ob ich das hinbeomme sodass wir das auch verwenden können



ich hab ne möglichkeit gefunden, ich hab einfach ein memo erstellt wo ich in der renderprocedure immer den wert Alpha in eine neue zeile hab schreiben lassen und am ende des programms alles in einer datei speichern lassen so haben wir ziehmlich viel daten aber genau das was uns interessiert,

und wenn ich mir die datei ansehe sehe ich das der alphawert ordnungsgemäß ansteigt

Zitat:
[...]
0
0
0
0
0
0
0
0
0
0
0
0
0
0,001
0,002
0,003
0,004
0,005
0,006
0,007
0,008
0,009
0,01
0,011
0,012
0,013
0,014
0,015
0,016
0,017
0,018
0,019
0,02
0,021
0,022
0,023
0,024
0,025
[...]


aber mir ist auch aufgefallen das es völlig egal ist ob alpha 0 oder 1 ist, das quad wird trotzdem immer voll schwarz gerendert sobald ich visible auf true setzte


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Do Apr 22, 2010 11:23 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
musst du hier nicht auch den fall alpha = 1 und alpha = 0 behandeln?

sonst greifen doch die ifs in den fällen nicht, oder bin ich jetzt falsch?
Code:
procedure TFadeToBlack.Render;
begin
  if Aktive then begin
    Visible := true;
    if Alpha < 1 then Alpha := Alpha + 0.001;
  end else begin
    if Alpha > 0 then Alpha := Alpha -0.001
      else
        Visible := false;
  end;


wenns Unsinn ist bitte ignorieren

Edit..
nehmen wir an Alpha fängt bei 0 an, dann näherst du dich irgendwann der 1... wenns dann 1 ist trifft das erste if nimmer zu, geht also ins else und prüft obs größer 0 ist, größer 0 ist es ja also ziehst du 0,001 ab auf 0,999 im nächsten Durchgang bist du damit aber wieder kleiner 1 und erhöhst auf 1...

Meiner Meinung nach springt das nach dem ersten Hochlaufen auf 1 zwischen 0,999 und 1 hin und her. aber ich bin mir auch net sicher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Do Apr 22, 2010 15:19 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
das stimmt nicht ganz, die überlegung is zwar korrewkt aber der else zweig stützt sich auf "if Aktive", der wert wird erst wieder gen null reduziert wenn Aktive = false

die bessere schreibweise sollte das klar machen

Code:
procedure TFadeToBlack.Render;
begin
  if Aktive then begin
    Visible := true;
    if Alpha < 1 then Alpha := Alpha + 0.001;
  end
  else begin
    if Alpha > 0 then Alpha := Alpha -0.001
      else
        Visible := false;
  end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: "Fade to Black"
BeitragVerfasst: Do Apr 22, 2010 21:39 
Offline
DGL Member
Benutzeravatar

Registriert: So Mär 07, 2010 18:40
Beiträge: 33
Also ich würde auch Ziz´s Vorschlag folgen. Habe selber erst vor kurzem den Fogging/ Darkness Effekt mit Hilfe des DGL Tutorials eingebaut und ich war überrascht wie einfach es ging.

Das Ganze lässt auch schöne Effekte zu. Wenn Du z.B. eine 3D Welt aus der 1. Person Perspektive hast, kannst Du die Dunkelheit "näher kommen lassen" (also den Effekt einer schwächer werdenden Lichtquelle erreichen).

Ich habe mal ein Screenshot als Beispiel angehängt.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Wissen nennen wir jenen kleinen Teil der Unwissenheit, den wir geordnet und klassifiziert haben. (Ambrose Bierce)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]