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

Aktuelle Zeit: Sa Jun 08, 2024 16:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 14:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
@Nils:
Der Weichzeichner wird auf die FBO-Textur angewendet, nicht auf die Szene die du in das FBO renderst.

Zitat:
Ich habe die Modelmatrix und Projektionsmatrix, wenn ich es richtig sehe, schon bei der Initialisierung auf Identity gesetzt

Das bezweifle ich, den dann würdest du deine Planeten nicht (vernünftig) sehen. Vermutlich hast du glLoadIdentity aufgerufen und danach dann gluPerspective, oder? Das verändert die gerade aktive Matrix....genau wie glTranslatef, gluLookAt, ....

@csderats:
Zitat:
Der Fragementshader wird ja einmal pro Pixel ausgeführt, dürfte es daher nicht schneller sein, zwei seperate Shader für Horizontal und Vertikal zu verwenden, weil ja IFs auf Uniforms angeblich so langsam sind

Ja, zwei separate Shader sind wahrscheinlich ein kleines bisschen schneller. Allerdings liegt der wesentliche Aufwand für diesen Shader nicht in der IF-Abfrage oder der FOR-Schleife sondern in den Texturzugriffen. Für einen Texturzugriff muss die Shader-Unit nämlich erstmal angehalten werden und auf den vergleichsweise langsamen Grafikspeicher warten. In diesem Fall hilft zwar der Cache, weil die Nachbarpixel quasi die gleichen Daten aus der Textur im gleichen Moment brauchen, aber trotzdem ist das langsam.

Zitat:
weil ja IFs auf Uniforms angeblich so langsam sind

Sooo schlimm ist das nicht, sie sind nur in vielen Fällen vermeidbar. Man sollte es einfach nicht übertreiben und lieber einen Shader mehr benutzen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 15:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Ahso. Dann komme ich auf diesen Code:
Code:
  1.   // FBO-Textur additiv blenden
  2.   glUseProgramObjectARB(Shader);
  3.   glDisable(GL_DEPTH_TEST);
  4.     glMatrixMode(GL_PROJECTION);
  5.     glLoadIdentity;
  6.     glMatrixMode(GL_MODELVIEW);
  7.     glLoadIdentity;
  8.     glEnable(GL_BLEND);
  9.       glBlendFunc(GL_ONE, GL_ONE);
  10.       glBindTexture(GL_TEXTURE_2D, FBOTex);
  11.       glBegin(GL_QUADS);
  12.         glTexCoord2f(1, 0);
  13.         glVertex3f(-1.0,  1.0, 0.0);
  14.         glTexCoord2f(0, 0);
  15.         glVertex3f(-1.0, -1.0, 0.0);
  16.         glTexCoord2f(0, 1);
  17.         glVertex3f( 1.0,  1.0, 0.0);
  18.         glTexCoord2f(1, 1);
  19.         glVertex3f( 1.0, -1.0, 0.0);
  20.       glEnd;
  21.     glDisable(GL_BLEND);
  22.   glEnable(GL_DEPTH_TEST);
  23.   glUseProgramObjectARB(0);

Oder was genau meinst Du mit
Coolcat hat geschrieben:
Der Weichzeichner wird auf die FBO-Textur angewendet, nicht auf die Szene die du in das FBO renderst.

sonst, denn eigentlich wende ich den Shader auch jetzt noch nicht auf die Textur an, sondern viel mehr auf das Zeichnen, ist für mich ein Unterschied. Aber wenn ich also mit meiner Annahme, dass ich es falsch gemacht habe, richtig liege, wie meinst Du das dann mit dem Shader ? Aktuell habe ich Überblendungen drinnen. Also komme ich in die Nähe eines Planeten/der Sonne (er liegt direkt vor einem), blenden zwei Strahlen durch das Bild - direkt vor dem Betrachter. Und genau deshalb vermute ich ja, dass ich auch jetzt noch den Shader falsch anwende.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 16:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ahso. Dann komme ich auf diesen Code:

Das sieht richtig aus, sofern der Shader da der Weichzeichner ist.

Zitat:
eigentlich wende ich den Shader auch jetzt noch nicht auf die Textur an, sondern viel mehr auf das Zeichnen, ist für mich ein Unterschied.

Also ich kann von hier nicht sehen was das da für ein Shader ist. Ich habe vermutet, dass es sich um den Weichzeichner handelt. Wenn du den Weichzeichner direkt auf die Sonne anwendest wird nur die Textur auf der Kugel weichgezeichnet, nicht aber das was du eigentlich willst, nämlich die Ränder der Kugel. Wird der Weichzeichner auf eine Textur angewendet in die die Szene gerendert wurde kann der Hintergrund mit dem Vordergrund verwischt werden.
=> Wenn es ein anderer Shader sein sollte dann vergiss was ich gesagt habe ;)

Zitat:
Aktuell habe ich Überblendungen drinnen. Also komme ich in die Nähe eines Planeten/der Sonne (er liegt direkt vor einem), blenden zwei Strahlen durch das Bild - direkt vor dem Betrachter.

Äh, was genau? Kann mir gerade nicht vorstellen was du dir unter zwei Strahlen vorstellst? Screenshot?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Es handelt sich um den Shader aus dem Wiki. Von daher ist alles korrekt ? Hm, das Ergebnis sieht anders aus. Die dicken Strahlen gehen von der Sonne aus, die schmalen von der Venus (kommt gerade vorbei).


Dateianhänge:
3.PNG
3.PNG [ 34.77 KiB | 5939-mal betrachtet ]

_________________
Meine Musik: spiker-music.net
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 17:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Die dicken Strahlen gehen von der Sonne aus, die schmalen von der Venus (kommt gerade vorbei).

Okay...also ich finde diese Strahlen etwas merkwürdig, aber wenn du diese wie eine Lichtquelle behandelst sollten die mit dem Glow-Effekt kompatibel sein.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 17:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Die Strahlen entstehen aus dem aktuellen Shader. Aber wie genau meinst Du das mit der Behandlung als Lichtquelle ?

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Achso...ich dachte das wäre ein gewünschter Effekt den du zusätzlich eingebaut hast. Wenn der Weichzeichner diese Strahlen produziert ist offensichtlich etwas falsch. Ich tippe mal auf nicht gesetzte Uniforms?

Zitat:
Die Strahlen entstehen aus dem aktuellen Shader.

Welcher Shader? Bitte drücke dich so präzise wie möglich aus, ich sitze hier doch nicht vor deinem Code...

...am besten kommst du mal in den DelphiGL-Chat.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Mi Dez 23, 2009 17:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Mit dem Shader meine ich den Weichzeichner. Also wenn ich Shader sage, meine ich in Zukunft immer den Weichzeichner, wenn nicht, sag ich es dazu :)

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Do Dez 24, 2009 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Gestern sind im IRC noch weitere Codeveränderungen zustandegekommen. Hier einfach mal der komplette aktuelle:
Vertex:
Code:
  1. void main()
  2. {
  3.   gl_TexCoord[0] = gl_TextureMatrix[0]*gl_MultiTexCoord0;
  4.   gl_Position    = gl_ModelViewProjectionMatrix*gl_Vertex;
  5. }

Fragment:
Code:
  1. uniform sampler2D texture0;
  2. uniform int textureWidth;
  3. uniform int textureHeight;
  4. uniform bool horizontal;
  5.  
  6. float gaussFilter[7] = float[7](0.015625, 0.09375, 0.234375, 0.3125, 0.234375, 0.09375, 0.015625);
  7.  
  8. void main()
  9. {
  10.   vec4 color = vec4(0.0, 0.0, 0.0, 0.0);
  11.   for (int i=0; i<7; i++)
  12.   {
  13.     vec2 texCoord;
  14.     if (horizontal)
  15.       texCoord = vec2(gl_TexCoord[0].x+float(i-4)/float(textureWidth), gl_TexCoord[0].y);
  16.     else
  17.       texCoord = vec2(gl_TexCoord[0].x, gl_TexCoord[0].y+float(i-4)/float(textureHeight));
  18.     color += texture2D(texture0, texCoord)*gaussFilter[i];
  19.   }
  20.   gl_FragColor = color;
  21. }

Code:
Code:
  1. // Zeichnen
  2. procedure TSolar.Render(tDelta : Real);
  3.   // Shaderquad rendern
  4.   procedure DrawShader;
  5.   begin
  6.     glMatrixMode(GL_PROJECTION);
  7.     glLoadIdentity;
  8.     glMatrixMode(GL_MODELVIEW);
  9.     glLoadIdentity;
  10.     glBegin(GL_TRIANGLE_STRIP);
  11.       glTexCoord2f(0, 1);
  12.       glVertex3f(-1.0,  1.0, 0.0);
  13.       glTexCoord2f(0, 0);
  14.       glVertex3f(-1.0, -1.0, 0.0);
  15.       glTexCoord2f(1, 1);
  16.       glVertex3f( 1.0,  1.0, 0.0);
  17.       glTexCoord2f(1, 0);
  18.       glVertex3f( 1.0, -1.0, 0.0);
  19.     glEnd;
  20.   end;
  21. var i : Integer;
  22. begin
  23.   // FBO befüllen
  24.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);
  25.   glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTex, 0);
  26.   glPushAttrib(GL_VIEWPORT_BIT);
  27.   glViewPort(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
  28.   Zeichne;
  29.   // Shader aktivieren
  30.   glUseProgramObjectARB(Shader);
  31.   glUniform1iARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('texture0')), 0);
  32.   glUniform1iARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('textureWidth')), SCREEN_WIDTH);
  33.   glUniform1iARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('textureHeight')), SCREEN_HEIGHT);
  34.   glDisable(GL_DEPTH_TEST);
  35.   // 6x Shader horizontal und 6x Shader vertikal auf FBO-Textur anwenden. Dabei müssen die Texturen gewechselt
  36.   // werden, da nicht die Textur beschrieben werden kann, welche gerade gelesen wird.
  37.   for i := 0 to 5 do
  38.   begin
  39.     // Horizontal
  40.     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTex2, 0);
  41.     glUniform1iARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('horizontal')), 0);
  42.     glBindTexture(GL_TEXTURE_2D, FBOTex);
  43.     DrawShader;
  44.     // Vertikal
  45.     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTex, 0);
  46.     glUniform1iARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('horizontal')), 1);
  47.     glBindTexture(GL_TEXTURE_2D, FBOTex2);
  48.     DrawShader;
  49.   end;
  50.   glUseProgramObjectARB(0);
  51.   glEnable(GL_DEPTH_TEST);
  52.   glPopAttrib;
  53.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  54.   // Normal rendern
  55.   Zeichne;
  56.   // Geblurte Textur über normale blenden
  57.   glDisable(GL_DEPTH_TEST);
  58.     glEnable(GL_BLEND);
  59.       glBlendFunc(GL_ONE, GL_ONE);
  60.       glBindTexture(GL_TEXTURE_2D, FBOTex);
  61.       DrawShader;
  62.     glDisable(GL_BLEND);
  63.   glEnable(GL_DEPTH_TEST);
  64. end;

Das Ergebnis ist ein weißer Bildschirm. Kommentiert man die Zeile 50 aus, sieht man den Blureffekt, allerdings wird der normale Rendervorgang nicht wie gewünscht ausgeführt (Zeile 55). Aber eigentlich müsste alles laufen, hat irgendjemand eine Idee, was ich falsch mache ? Ich kann mir nicht erklären, warum ein weißer Bildschirm entsteht, wenn ich den Shader abschalte.

_________________
Meine Musik: spiker-music.net


Zuletzt geändert von Nils am So Jan 03, 2010 20:02, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Do Dez 24, 2009 16:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
So, dank Coolcat läuft nun alles. Ich hatte einfach vergessen, die Modell- und Projektionsmatrix zurückzusetzen. Also hier mal der gesamte relevante Code, welcher bei mir läuft.
Vertex Shader:
Code:
  1. void main()
  2. {
  3.   gl_TexCoord[0] = gl_TextureMatrix[0] *gl_MultiTexCoord0;
  4.   gl_Position    = gl_ModelViewProjectionMatrix*gl_Vertex;
  5. }

Fragment Shader:
Code:
  1. uniform sampler2D uTexture;
  2. uniform vec2 uShift;
  3.  
  4. const int gaussRadius = 11;
  5. const float gaussFilter[gaussRadius] = float[gaussRadius](0.0402, 0.0623, 0.0877, 0.1120, 0.1297, 0.1362, 0.1297, 0.1120, 0.0877, 0.0623, 0.0402);
  6.  
  7. void main()
  8. {
  9.   vec2 texCoord = gl_TexCoord[0].xy-float(int(gaussRadius/2))*uShift;
  10.   vec3 color = vec3(0.0, 0.0, 0.0);
  11.   for (int i=0; i<gaussRadius; ++i)
  12.   {
  13.     color    += gaussFilter[i]*texture2D(uTexture, texCoord).xyz;
  14.     texCoord += uShift;
  15.   }
  16.   gl_FragColor = vec4(color, 1.0);
  17. }

Code:
Code:
  1.   private
  2.     ShaderProgram, Shader : GLHandleARB;        // Shader
  3.     FBO, FBOTex, FBOTex2, DepthBuffer : GluInt; // FBO
  4.  
  5. // Initialisierungen
  6. constructor TSolar.Create;
  7. var Fehler : glEnum;
  8. begin
  9.   // Shader laden
  10.   ShaderProgram := glCreateProgramObjectARB;
  11.   Shader        := LoadFragmentAndVertexShader(ShaderProgram, ExtractFilePath(ParamStr(0))+'data/glow.fp', ExtractFilePath(ParamStr(0))+'data/glow.vs');
  12.   // FBO initialisieren
  13.   glGenFramebuffersEXT(1, @FBO);
  14.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);
  15.   glGenRenderbuffersEXT(1, @DepthBuffer);
  16.   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, DepthBuffer);
  17.   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, Round(FBOScale*SCREEN_WIDTH), Round(FBOScale*SCREEN_HEIGHT));
  18.   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, DepthBuffer);
  19.   glGenTextures(1, @FBOTex);
  20.   glBindTexture(GL_TEXTURE_2D, FBOTex);
  21.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  22.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  23.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,  Round(FBOScale*SCREEN_WIDTH), Round(FBOScale*SCREEN_HEIGHT), 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
  24.   glGenTextures(1, @FBOTex2);
  25.   glBindTexture(GL_TEXTURE_2D, FBOTex2);
  26.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  27.   glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  28.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,  Round(FBOScale*SCREEN_WIDTH), Round(FBOScale*SCREEN_HEIGHT), 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
  29.   glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTex, 0);
  30.   // FBO auf Fehler prüfen
  31.   Fehler := glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
  32.   case Fehler of
  33.     GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
  34.       raise Exception.Create('Incomplete attachment');
  35.     GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
  36.       raise Exception.Create('Missing attachment');
  37.     GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
  38.       raise Exception.Create('Incomplete dimensions');
  39.     GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
  40.       raise Exception.Create('Incomplete formats');
  41.     GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
  42.       raise Exception.Create('Incomplete draw buffer');
  43.     GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
  44.       raise Exception.Create('Incomplete read buffer');
  45.     GL_FRAMEBUFFER_UNSUPPORTED_EXT:
  46.       raise Exception.Create('Framebufferobjects unsupported');
  47.   end;
  48. end;
  49.  
  50. // Freigaben
  51. destructor TSolar.Destroy;
  52. begin
  53.   glDetachObjectARB(ShaderProgram, Shader);
  54.   glDeleteShader(Shader);
  55.   glDeleteShader(ShaderProgram);
  56.   glDeleteFramebuffersEXT(1, @FBO);
  57.   glDeleteRenderbuffersEXT(1, @DepthBuffer);
  58.   glDeleteTextures(1, @FBOTex);
  59. end;
  60.  
  61. // Zeichnen
  62. procedure TSolar.Render(tDelta : Real);
  63.   // Shaderquad rendern
  64.   procedure DrawShader;
  65.   begin
  66.     glMatrixMode(GL_PROJECTION);
  67.     glLoadIdentity;
  68.     glMatrixMode(GL_MODELVIEW);
  69.     glLoadIdentity;
  70.     glBegin(GL_TRIANGLE_STRIP);
  71.       glTexCoord2f(0, 1);
  72.       glVertex3f(-1.0,  1.0, 0.0);
  73.       glTexCoord2f(0, 0);
  74.       glVertex3f(-1.0, -1.0, 0.0);
  75.       glTexCoord2f(1, 1);
  76.       glVertex3f( 1.0,  1.0, 0.0);
  77.       glTexCoord2f(1, 0);
  78.       glVertex3f( 1.0, -1.0, 0.0);
  79.     glEnd;
  80.   end;
  81. var i : Integer;
  82. begin
  83.   // FBO befüllen
  84.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);
  85.   glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTex, 0);
  86.   glPushAttrib(GL_VIEWPORT_BIT);
  87.   glViewPort(0, 0, Round(FBOScale*SCREEN_WIDTH), Round(FBOScale*SCREEN_HEIGHT));
  88.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  89.   Zeichne;
  90.   // Shader aktivieren
  91.   glUseProgramObjectARB(Shader);
  92.   glUniform1iARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('uScene')), 0);
  93.  
  94.   glDisable(GL_DEPTH_TEST);
  95.   // 8x Shader horizontal und 6x Shader vertikal auf FBO-Textur anwenden. Dabei müssen die Texturen gewechselt
  96.   // werden, da nicht die Textur beschrieben werden kann, welche gerade gelesen wird.
  97.   for i := 0 to 7 do
  98.   begin
  99.     // Horizontal
  100.     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTex2, 0);
  101.     glUniform2fARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('uShift')), 1.6/SCREEN_WIDTH, 0.0);
  102.     glBindTexture(GL_TEXTURE_2D, FBOTex);
  103.     DrawShader;
  104.     // Vertikal
  105.     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FBOTex, 0);
  106.     glUniform2fARB(glGetUniformLocationARB(ShaderProgram, PGLCharARB('uShift')), 0.0, 1.6/SCREEN_HEIGHT);
  107.     glBindTexture(GL_TEXTURE_2D, FBOTex2);
  108.     DrawShader;
  109.   end;
  110.   glPopAttrib;
  111.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  112.   // Geblurte Textur rendern
  113.   glDisable(GL_LIGHTING);
  114.   glDisable(GL_DEPTH_TEST);
  115.     glBindTexture(GL_TEXTURE_2D, FBOTex);
  116.     DrawShader;
  117.   glEnable(GL_DEPTH_TEST);
  118.   glEnable(GL_LIGHTING);
  119.   glClear(GL_DEPTH_BUFFER_BIT);
  120.   // Normal rendern
  121.   glUseProgramObjectARB(0);
  122.   glMatrixMode(GL_PROJECTION);
  123.   glLoadIdentity;
  124.   gluPerspective(45.0, SCREEN_WIDTH/SCREEN_HEIGHT, 0.1, 300.0);
  125.   glMatrixMode(GL_MODELVIEW);
  126.   glLoadIdentity;
  127.   glEnable(GL_BLEND);
  128.     glBlendFunc(GL_ONE, GL_ONE);
  129.     Zeichne;
  130.   glDisable(GL_BLEND);
  131. end;
  132.  
  133. // Sonnensystem zeichnen
  134. procedure TSolar.Zeichne;
  135. begin
  136.   glLoadIdentity;
  137.   glTranslatef(0.0, 0.0, Zoom);
  138.   // Perspektive setzen
  139.   gluLookAt(Camera.Position.X, Camera.Position.Y, Camera.Position.Z, Camera.View.X, Camera.View.Y, Camera.View.Z, Camera.UpVector.X, Camera.UpVector.Y, Camera.UpVector.Z);
  140.   ...
  141. end;


Dann nochmal ein großes Dankeschön an Coolcat für die Hilfe :)! Ich denke dieser Dreifachpost ist nicht schlimm, dieses Thema steht so oder so im Forum Shader ganz oben. So ist es jedenfalls hoffe ich übersichtlicher.

_________________
Meine Musik: spiker-music.net


Zuletzt geändert von Nils am So Jan 03, 2010 20:02, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: Fr Dez 25, 2009 19:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
In deinem Kommentar schreibst du, dass du 6x renderst. Es sind aber 7 Durchgänge. Das ändert jetzt alles, denk ich... 8) ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gluSphere als Sonne
BeitragVerfasst: So Jan 03, 2010 20:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Autsch, ja ich kann nicht zählen, wobei es doch eigentlich 8 sein müssten.

_________________
Meine Musik: spiker-music.net


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


Wer ist online?

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