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

Aktuelle Zeit: Fr Jul 18, 2025 16:55

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Tiefenkanal in Textur Rendern
BeitragVerfasst: Mi Jun 21, 2006 19:28 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Hi,

ich mal wieder, wie häufig in letzter Zeit( Da fühlt man sich richtig unwohl ).

Wie der Thread schon sagt möchte ich den Tiefenkanal in eine Textur Rendern, und dann auf einem Quad darstellen( auch wenn das vorerst weniger Sinnvoll ist ).

Erstmal der Konstruktor der Tiefenmap( Mir viel kein anderer Name ein ):

Code:
  1.  
  2.         public DepthMap(Size size)
  3.         {
  4.             gl.GenFramebuffersEXT(1, iFramebufferObject);
  5.             int tTexture = 0;
  6.             gl.GenTextures(1, ref tTexture);
  7.             base.Texture = tTexture;
  8.             iDepthRenderbuffer = gl.GenRenderbuffersEXT();
  9.  
  10.             // init texture
  11.             gl.BindTexture(gl.TEXTURE_2D, base.Texture);
  12.             gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, size.Width, size.Height, 0, gl.RGBA, gl.FLOAT, null);
  13.             gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
  14.             gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
  15.             gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
  16.             gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
  17.  
  18.             // Enable render-to-texture
  19.             gl.BindFramebufferEXT(gl.FRAMEBUFFER_EXT, iFramebufferObject[0]);
  20.  
  21.             // Set up depth_tex for render-to-texture
  22.             gl.FramebufferTexture2DEXT(gl.FRAMEBUFFER_EXT,
  23.                                       gl.DEPTH_ATTACHMENT_EXT,
  24.                                       gl.TEXTURE_2D, base.Texture, 0);
  25.  
  26.             gl.BindRenderbufferEXT(gl.RENDERBUFFER_EXT, iDepthRenderbuffer);
  27.             //GL_DEPTH_COMPONENT24              0x81A6
  28.  
  29.             gl.RenderbufferStorageEXT(gl.RENDERBUFFER_EXT, 0x81A6, size.Width, size.Height);
  30.             gl.FramebufferRenderbufferEXT(gl.FRAMEBUFFER_EXT, gl.DEPTH_ATTACHMENT_EXT,
  31.                                          gl.RENDERBUFFER_EXT, iDepthRenderbuffer);
  32.  
  33.             // No color buffer to draw to or read from
  34.             gl.DrawBuffer(gl.NONE);
  35.             gl.ReadBuffer(gl.NONE);
  36.  
  37.             // Re-enable rendering to the window
  38.             gl.BindFramebufferEXT(gl.FRAMEBUFFER_EXT, 0);
  39.         }
  40.  


Und jetzt der Rendercode( Darstellen tut er auf jeden fall was wenn ich nicht den Tiefenkanal rendere sondern in eine normale Textur mit Farbe & Co. ):
Code:
  1.  
  2.             iDepthMap.BindDepthMap();
  3.  
  4.  
  5.             Matrix.WorldMatrix.Push();
  6.  
  7.            
  8.             Viewport.ClearColor(new ColorValue(Color.BlueViolet));
  9.             Viewport.Clear(ClearMode.ColorDepth);
  10.             Matrix.WorldMatrix.MatrixMode = MatrixMode.Projection;
  11.             Viewport.SetViewport(0, 0, iFramebuffer.Size.Width, iFramebuffer.Size.Height);
  12.             Matrix.WorldMatrix.LoadIdentity();
  13.             Matrix.WorldMatrix.SetPerspective(45f, iFramebuffer.Size.Width / iFramebuffer.Size.Height, 0.01, 2000);
  14.             Matrix.WorldMatrix.MatrixMode = MatrixMode.Modelview;
  15.             Matrix.WorldMatrix.LoadIdentity();
  16.             Matrix.WorldMatrix.Translate(0, 0, -40);
  17.  
  18.             iPhongShader.BindShader();
  19.             Manager.Wireframe = false;
  20.             Matrix a = Matrix.IdentityMatrix;
  21.             //a.Rotate(180, 0, 0, 1);
  22.             //a.Multmatrix();
  23.             iSpheres[0].DrawBuffer();
  24.  
  25.             Shader.UnbindShader();
  26.             iTexture.BindTexture();
  27.             iPlanes[0].DrawBuffer();
  28.             Texture2D.UnbindTexture();
  29.             iPhongShader.BindShader();
  30.  
  31.  
  32.             //a.Translate(-10, 0, 0);
  33.             //a.Multmatrix();
  34.             Manager.Wireframe = true;
  35.             Manager.Culling.Enabled = false;
  36.             iSpheres[1].DrawBuffer();
  37.             Manager.Culling.Enabled = true;
  38.             Manager.Culling.CullFace = CullFace.Back;
  39.             Manager.Wireframe = false;
  40.             Shader.UnbindShader();
  41.  
  42.             Matrix.WorldMatrix.Pop();
  43.             DepthMap.UnbindDepthMap();
  44.  
  45.             //iFramebuffer.BindTexture();
  46.             iDepthMap.BindTexture();
  47.  

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 21, 2006 20:40 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Wenn du eine Textur an GL_DEPTH_ATTACHMENT bindest, muss diese auch eine Tiefentextur sein. Das bedeutet du musst für das interne Format bei glTexImage2D (der 3. Parameter) sowas wie GL_DEPTH_COMPONENT24 angeben. Ein fertiges Framebufferobjekt solltest du übrigens mit glCheckFramebufferStatusEXT überprüfen, das deckt Fehler dieser Art nämlich auf.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 28, 2006 16:34 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Also atm Funktioniert es noch nicht, hat vielleicht jemand ein Funktionierendes Beispiel( kann ruhig in Delphi sein ). thx

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


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 » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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 ]