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

Aktuelle Zeit: Di Jul 15, 2025 00:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 12, 2006 18:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Das schnellste dürfte es sein in einem zusätzlichen renderpass (oder zwei für einen aufgeteilten Filter) einen Gauss-Filter in einem Shader über die textur laufen zu lassen. Sollten Shader nicht in Frage kommen, dann ließe sich der Shader über Blending /Multitexturing noch simulieren. In dem fall würden dann jeweils eine leicht verschobene Texturkoordinate und der entsprechende Faktor angegeben werden.


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

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

sorry, imaging subset ist wirklich nur optional, habe grade nochmal in der OpenGL-Specification nachgeschaut.

ich glaube, ich würde es dann auch so wie Grizzly machen.

Die Gewichtungen in der Matrix bilden den Alphawert und du blendest dann immer denselben Quad mit glBlendFunc(GL_SRC_ALPHA, GL_ONE) und leicht verschobenen Texturkoordinaten (die Verschiebung müsstest du anhand der Breite und Höhe deines Bildes berechnen).

Der erste Quad benötigt allerdings glBlendFunc(GL_SRC_ALPHA, GL_ZERO) oder du nimmst einen schwarzen Hintergrund :wink:


Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 13, 2006 10:12 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ihr meint also das ganze nochmal größer rüberblenden ? hm kA ob das funktioniert, shader scheinen wohl das einzig sinnvolle zu sein


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 13, 2006 14:45 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
wieso größer?
was wir meinen ist, dass man die Textur mehrfach zeichnet, mit jeweils verschobenen Texturkoordinaten und dieses entsprechend des jeweils zugehörigen faktors zusammenblendet. Sowas hab ich mal für XDream geschrieben, daher kann ich dir auch nen source dazu geben, der is zwar nich optimal, aber immerhin:

Code:
  1. Procedure TXD_Fake_HDR.Blur;
  2. var
  3.   x, y       : integer;
  4.   xFac, yFac : Single;
  5. const cGaussMatrix : Array[0..4] of Array[0..4] of Single =  
  6.                                                               ((1/100,2/100,4/100,2/100,1/100),
  7.                                                                (2/100,4/100,8/100,4/100,2/100),
  8.                                                                (4/100,8/100,16/100,8/100,4/100),
  9.                                                                (2/100,4/100,8/100,4/100,2/100),
  10.                                                                (1/100,2/100,4/100,2/100,1/100));
  11. Begin
  12.   glPushMatrix;
  13.   XD.render.startortho;
  14.  
  15.   glclearcolor(0,0,0,0);
  16.   glclear(GL_COLOR_BUFFER_BIT);
  17.  
  18.   glenable(GL_TEXTURE_2D);
  19.   glBindTexture(GL_TEXTURE_2D, zmap);
  20.  
  21.   glEnable(GL_BLEND);
  22.  glBlendFunc(gl_one, gl_one);
  23.  
  24.   glcolor4f(1,1,1,1);
  25.   for y := -2 to 2 do
  26.   Begin
  27.     yFac := y/Buffer_Height*3/2;
  28.     for x := -2 to 2 do
  29.     Begin
  30.       glcolor4f(cGaussMatrix[y+2,x+2],cGaussMatrix[y+2,x+2],cGaussMatrix[y+2,x+2],1);
  31.       xFac := x/Buffer_Width*3/2;
  32.  
  33.       glbegin(GL_Quads);
  34.         gltexcoord2f(0+xFac,1+yFac); glvertex2f(0,0);
  35.         gltexcoord2f(0+xFac,0+yFac); glvertex2f(0,480);
  36.         gltexcoord2f(1+xFac,0+yFac); glvertex2f(640,480);
  37.         gltexcoord2f(1+xFac,1+yFac); glvertex2f(640,0);
  38.       glend;
  39.     end;
  40.   end;
  41.   glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, Buffer_Width, Buffer_Height, 0);
  42.   gldisable(GL_TEXTURE_2D);
  43.   gldisable(GL_BLEND);
  44.  
  45.   XD.render.stoportho;
  46.   glPopMatrix;
  47. end;


das dürfte zumindest der unaufwendigste Weg sein das zu realisieren. Multitexturing und/oder shader sind aber natürlich schneller. Um das zu optimieren sollte man im regelfall auch noch den Gaussfilter aufteilen in horizontale und vertikale komponente, das hab ich mir da gespart.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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