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

Aktuelle Zeit: So Jul 20, 2025 01:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Motion Blur
BeitragVerfasst: Mo Okt 30, 2006 15:35 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Hi, ich versuche schon den ganzen Tag ein motion blur für meine komplette szene hinzubekommen,
aber es will mir nicht gelingen.
ich hab mir das so vorgestellt:

ein array of gluint für texturen (renderpässe) in dieses array kommt immer an letzter stelle die
szene neu hineingerendert. vorher wird jedem array element der wert des nächsten zugewiesen.

1 = 2
2 = 3
3 = 4

...

der letzte bleibt dann über und bekommt wie gesagt die neue textur.
dann wird das ganze eben gezeichnet und geblendet, aber es klappt net, ich habe das array
voll mit texturen die alle gleich sind und das blenden taug auch nichts, da das ganze immer heller wird.
ich hab jetzt nochmal alles gelöscht und will noch mal gaaaaaanz von vorne machen. wie stelle ich das an ?

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 30, 2006 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Benutz doch den accumualtionbuffer...
abgesehen vom Initialisieren bauch man SDL_GL_SwapBuffers(); o.Ä. nur dur folgenden Coder ersetzten hier di komplette funktion die ich in Quake3 ersetzt hab:

Code:
  1.  
  2. void GLimp_EndFrame (void)
  3. {
  4.     static int blur=1,blurfac=1 ; //add by oc2k1
  5.     static float lastticks=0;
  6.     float ticks = SDL_GetTicks();
  7.  // don't flip if drawing to front buffer
  8.   if ( Q_stricmp( r_drawBuffer->string, "GL_FRONT" ) != 0 )
  9.   {
  10.         if (blurfac<=1){
  11.         SDL_GL_SwapBuffers();
  12.         if ((ticks-lastticks) < 16.0)blurfac++;
  13.         lastticks = ticks;
  14.         }
  15.     else{
  16.         qglAccum (GL_ACCUM, 1.0/blurfac);
  17.         if (blur >= blurfac){
  18.             qglAccum (GL_RETURN, 1.0);
  19.             SDL_GL_SwapBuffers();
  20.                 blur=1;
  21.             qglClear(GL_ACCUM_BUFFER_BIT);
  22.             if ((ticks - lastticks) < 16.0) blurfac++;
  23.             if ((ticks - lastticks) > 24.0) blurfac--;
  24.             lastticks = ticks;
  25.             }
  26.         else{
  27.             blur++;
  28.             }
  29.         }
  30.     }
  31.  

Das kann man auch scherzhafter weise wieder in den Quake3 Code einfügen, dann sollte man aber auch den Accumulationbuffer aktiviern
Code:
  1.  
  2. // edit by oc2k1
  3.     SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, 16);
  4.     SDL_GL_SetAttribute( SDL_GL_ACCUM_GREEN_SIZE, 16);
  5.     SDL_GL_SetAttribute( SDL_GL_ACCUM_BLUE_SIZE, 16);
  6.     SDL_GL_SetAttribute( SDL_GL_ACCUM_ALPHA_SIZE, 16);
  7. //end edit

Das muss so um Zeile 640 eingefügt werden ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 30, 2006 17:28 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich hab das schonmal versucht mit dem akkumulationbuffer, aber es passierte nicht wirklich was, außerdem muss ich die vorherige szene doch nochmal rendern ? oder rendere ich einfach die gleiche szene nochmal in den buffer Oo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 30, 2006 22:26 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
hmm der Code ist dazu da alle Bilder die innerhalb von etwa einer 60stel sekunde ankommen aufzuaddieren.
benutz

glAccum (GL_ACCUM, 1.0/numofframes); zum aufaddieren und glAccum (GL_RETURN, 1.0); SDL_GL_SwapBuffers(); zum zurückhohlen..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 31, 2006 19:08 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
einfach den code vorm swapbuffers und mehr net ? kein zweites zeichnen Oo ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 02, 2006 20:04 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich weiß halt net genau wie ich das benutze, hab noch nichts gescheites gefunden, ein paar demos, aber das klappte halt net so recht


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 02, 2006 22:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hast du denn überhaupt technisch verstanden wozu der Accumulation Buffer gut ist? Ich denke mal das ist eine Grundvorraussetzung dazu, dass du das hinbekommst was du vor hast. Wenn du das richtig begriffen hast dann sollte es eigentlich ein leichtes sein.


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

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ich weiß wozu der akkumulation buffer ist, aber es funktioniert halt nicht


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 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.008s | 16 Queries | GZIP : On ]