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

Aktuelle Zeit: Mi Jul 09, 2025 19:03

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Re: Anti-Aliasing
BeitragVerfasst: Do Mai 05, 2011 19:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
Ich wusste jetzt nicht ob ich lieber diesen Thread wiederbeleben soll, oder nicht.
Aber dann dachte ich mir, dass Abspalten zur Not ja auch noch eine Möglichkeit ist,
zumal der Thread-Ersteller seit über 6 Monaten nicht mehr online war.

Ich möchte eigentlich auch (erstmal) ein FSAA via FBO schaffen, doch vorher hab ich noch eine andere Frage, was auch wieder FSAA betrifft aber mit Hilfe des Akkumulationspuffers:

Ich hatte es so gemacht [Vorsicht! Ist wahrscheinlich von der vorgehensweise her falsch!]:
Am Anfang erstelle ich ein Array von 2 single-Werten (in Delphi beispielsweise TAAOffsets: Array of Array[0..1] of Single) und dann hab ich einfach für nur eine Verschiebung von 0 bis 1 darin gespeichert, das ganze dann mit einem angepassten Faktor multipliziert, damit die Verschiebung unabhängig vom eigentlichen Offset verändert werden kann.
Hier mal an sich die Offset-Erstellung:

Code:
  1.   if (Value=0)or(Value=2)or(Value=4)or(Value=8) then
  2.   begin
  3.     fAA := Value;
  4.     SetLength(fAAOS, fAA*2+1);
  5.     fAAOS[0,0] := 0.0;
  6.     fAAOS[0,1] := 0.0;
  7.     if (fAA>=2) then
  8.     begin
  9.       fAAOS[1,0] := -1.0; fAAOS[1,1] := +1.0;
  10.       fAAOS[2,0] := +1.0; fAAOS[2,1] := +1.0;
  11.       fAAOS[3,0] := -1.0; fAAOS[3,1] := -1.0;
  12.       fAAOS[4,0] := +1.0; fAAOS[4,1] := -1.0;
  13.       if (fAA>=4) then
  14.       begin
  15.         fAAOS[5,0] := -0.5; fAAOS[5,1] := +0.5;
  16.         fAAOS[6,0] := +0.5; fAAOS[6,1] := +0.5;
  17.         fAAOS[7,0] := -0.5; fAAOS[7,1] := -0.5;
  18.         fAAOS[8,0] := +0.5; fAAOS[8,1] := -0.5;
  19.         if (fAA>=8) then
  20.         begin
  21.            fAAOS[9,0] :=  0.0;  fAAOS[9,1] := +1.0;
  22.           fAAOS[10,0] := -1.0; fAAOS[10,1] :=  0.0;
  23.           fAAOS[11,0] := +1.0; fAAOS[11,1] :=  0.0;
  24.           fAAOS[12,0] :=  0.0; fAAOS[12,1] := -1.0;
  25.           fAAOS[13,0] :=  0.0; fAAOS[13,1] := +0.5;
  26.           fAAOS[14,0] := -0.5; fAAOS[14,1] :=  0.0;
  27.           fAAOS[15,0] := +0.5; fAAOS[15,1] :=  0.0;
  28.           fAAOS[16,0] :=  0.0; fAAOS[16,1] := -0.5;
  29.         end;
  30.       end;
  31.     end;
  32.   end;


Da ich halt das Offset nich dynamisch berechne hab ich halt das "AA" auf 0,2,4 udn 8 beschränkt.

Und hier dann die Render-Methode:

Code:
  1.   glClear(GL_ACCUM_BUFFER_BIT);
  2.   for i := 0 to High(fAAOS) do
  3.   begin
  4.     glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.     glPushMatrix();
  6.       glTranslatef(AAF*fAAOS[i,0],AAF*fAAOS[i,1],0);
  7.       Scene.Render();
  8.       glAccum (GL_ACCUM, 1/Length(fAAOS));
  9.     glPopMatrix();
  10.   end;
  11.   glAccum (GL_RETURN, 1);
  12.   glFlush();


Scene.Render() zeichnet natürlich die ganze Szene (Licht ist nicht implementiert)
Ich weiß auch das es sehr inperfomant ist da bei 8xAA 17 mal die Szene berechnet wird.
Aber rein theoretisch gesehen, ist das doch FSAA oder?

Und noch was anders was Coolcat erwähnt hatte:
Zitat:
Was du da beschreibst ist eine Art Weichzeichner,
Dürfte ja eigentlich nicht stimmen, weil ja nicht immer das gleiche Bild genommen wird, sondern um einen minimalen Faktor halt verschoben ist.

Ich möchte noch mal erwähnen, dass das eine ÄUßERST schlechte - wenn ich es denn überhaupt so nennen darf - Umsetzung für FSAA ist.

Darum hab ich mich auch ma in die Variante mit dem FBO eingelesen,
das Rendern in die Textur und die Verwendung derer ist realisiert, allerdings habe ich das Gefühl, dass der Texturparameter GL_TEXTURE_MIN_FILTER nicht auf GL_LINEAR eingestellt ist, obwohl ich es so initializiere (ich verweise auf die Bilder im Anhang)

Ich render an sich 2 Quads ins FBO/in die Textur und pack die dann ganz normal in ein Quadrat, das auf dem Bildschirm dann 507x506 Pixel groß ist, für AA wird dann einfach mit dem AA die Größe multipliziert. Aber für mich sieht das Ergebnis nicht mal ansatzweise nach AA aus.

Hier mal die Erstellung des FBOs usw:
Code:
  1.   glGenFramebuffersEXT(1, @fbo);
  2.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  3.   glGenRenderbuffersEXT(1, @depthbuffer);
  4.   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthbuffer);
  5.   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, fbos, fbos);
  6.   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthbuffer);
  7.   glGenTextures(1, @tex);
  8.   glBindTexture(GL_TEXTURE_2D, tex);
  9.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  10.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  11.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,  fbos, fbos, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
  12.   glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D, tex, 0);


Und hier das Rendern:
Code:
  1.   glViewport(0,0,clientwidth,clientheight);
  2.   glMatrixMode(GL_PROJECTION);
  3.   glLoadIdentity;
  4.   gluPerspective(45,clientwidth/clientheight, 0.1, 100);
  5.   glMatrixMode(GL_MODELVIEW);
  6.   glLoadIdentity;
  7.   glTranslatef(0,0,-5);
  8.  
  9.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  10.   glPushAttrib(GL_VIEWPORT_BIT);
  11.   glViewPort(0, 0, fbos, fbos);
  12.   glClearColor(1,0,0,1);
  13.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  14.  
  15.   glPushMatrix();
  16.   glRotatef(30,0,0,1);
  17.  
  18.   glBegin(GL_QUADS);
  19.     glColor3f(1,1,0);
  20.     glVertex2f(-2,-1);
  21.     glVertex2f(-1,-0);
  22.     glVertex2f(-0,-0);
  23.     glVertex2f(-0,-2);
  24.  
  25.     glColor3f(0,1,1);
  26.     glVertex2f(1,1);
  27.     glVertex2f(1,0);
  28.     glVertex2f(0,0);
  29.     glVertex2f(0,1);
  30.   glEnd();
  31.  
  32.   glPopMatrix();
  33.   glPopAttrib;
  34.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  35.  
  36.   glClearColor(0,0,0,1);
  37.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  38.  
  39.   glEnable(GL_TEXTURE_2D);
  40.   glBindTexture(GL_TEXTURE_2D, tex);
  41.   glBegin(GL_QUADS);
  42.     glColor3f(1,1,1);
  43.     glTexCoord2f(0,0); glVertex2f(-2,-2);
  44.     glTexCoord2f(0,1); glVertex2f(-2,+2);
  45.     glTexCoord2f(1,1); glVertex2f(+2,+2);
  46.     glTexCoord2f(1,0); glVertex2f(+2,-2);
  47.   glEnd();
  48.   glDisable(GL_TEXTURE_2D);


Selbst 16xAA macht so wie ichs jetzt mit dem FBO umgesetzt hab kaum einen Unterschied zum normalen Bild ohne AA

MfG
bubble


EDIT: Zum Vergleich mal das AA mit dem Akkumulationspuffer als Bilder im Anhang (pinker Hintergrund)


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

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Zuletzt geändert von thebubble am Do Mai 05, 2011 20:10, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Anti-Aliasing
BeitragVerfasst: Do Mai 05, 2011 19:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Threadnekromantie ist prinzipiell eher nicht erwünscht.

Was deine Screenshots anbelangt: Die sind wertlos. JPG ist für das Problem das denkbar schlechteste Format. Mach die nochmal und speichere sie als PNG. Wenn du genau hinschaust, bei jpg sind die kanten total verschwommen.

greetings

_________________
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: Re: Anti-Aliasing
BeitragVerfasst: Do Mai 05, 2011 20:11 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
habs jetzt im Opengl-Forum eröffnet: Link

MfG
bubble

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 10 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.016s | 16 Queries | GZIP : On ]