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

Aktuelle Zeit: Fr Jul 18, 2025 15:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit eigener Klasse
BeitragVerfasst: Di Aug 16, 2005 17:00 
Offline
DGL Member

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

ich habe eine eigene Klasse( B.z.w. ein Template ) geschrieben( Vermutlich mein letztes mal Delphi ), diese Funktioniert eigentlich zimlich gut.
Jetzt habe ich sie umgeschrieben so das man sie Ableiten kann, auch das Funktioniert.

Das genaue Problem kenne ich nicht, aber ums anderst zu sagen:
Ich stehe auf dem Schlauch, und finde den Fehler nicht.
Ich Rendere in einen PixelBuffer, und möchte die Textur nun drüber Blenden( Um genau zu sein wollte ich Glow'en ).
Leider möchte mein OpenGL mir aber nicht meinen Triangelstrip Rendern, b.z.w. ich sehe ihn nicht.

Hier der Code meiner Renderloop( Ist nur zum Testen ):
Code:
  1.  
  2.   PixelBuffer.Enable;
  3.   glMatrixMode(GL_PROJECTION);
  4.   glLoadIdentity;
  5.   gluPerspective(45,PixelBuffer.Width/PixelBuffer.Height,nClip,fClip);
  6.   glMatrixMode(GL_MODELVIEW);
  7.   glLoadIdentity;
  8.   glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  9.  
  10.   glBegin(GL_TRIANGLE_STRIP);
  11.     glColor3f(1,0,0); glVertex3f(-1,-1,0);
  12.     glColor3f(0,1,0); glVertex3f(1,-1,0);
  13.     glColor3f(1,0,1); glVertex3f(-1,1,0);
  14.     glColor3f(0,0,1); glVertex3f(1,1,0);
  15.   glEnd;
  16.   PixelBuffer.Disable;
  17.  
  18.  
  19.   self.LoadSettings();
  20.   glBegin(GL_TRIANGLE_STRIP);
  21.     glColor3f(1,0,0); glVertex3f(-1,-1,0);
  22.     glColor3f(0,1,0); glVertex3f(1,-1,0);
  23.     glColor3f(1,0,1); glVertex3f(-1,1,0);
  24.     glColor3f(0,0,1); glVertex3f(1,1,0);
  25.   glEnd;
  26.  
  27.   glDisable(GL_DEPTH_TEST);
  28.   glEnable(GL_Blend);
  29.   glBlendFunc(GL_ONE,GL_ONE);
  30.  
  31.   glMatrixMode(GL_MODELVIEW);
  32.   glLoadIdentity();
  33.  
  34.   glMatrixMode(GL_PROJECTION);
  35.   glLoadIdentity();
  36.   glOrtho(0,1,0,1,-1,1);
  37.   PixelBuffer.Bind;
  38.  
  39.   glEnable(GL_Blend);
  40.   glBlendFunc(GL_ONE,GL_ONE);
  41.     glBegin(GL_QUADS);
  42.         glTexCoord2f(0, 0);
  43.         glVertex2f(0, 0);
  44.         glTexCoord2f(1, 0);
  45.         glVertex2f(1, 0);
  46.         glTexCoord2f(1, 1);
  47.         glVertex2f(1, 1);
  48.         glTexCoord2f(0, 1);
  49.         glVertex2f(0, 1);
  50.     glEnd();
  51.   glDisable(GL_Blend);
  52.   glEnable(GL_DEPTH_TEST);
  53.  
  54.   glMatrixMode(GL_PROJECTION);
  55.  
  56.   Result := True;
  57.  


Hier der Code für self.LoadSettings();:
Code:
  1. procedure TGLMain.LoadSettings(Rad: Double = 45);
  2. begin
  3.   glViewport(Left,Top,Width,Height);
  4.   glMatrixMode(GL_PROJECTION);
  5.   glLoadIdentity;
  6.   gluPerspective(Rad,Width/Height,nClip,fClip);
  7.   glMatrixMode(GL_MODELVIEW);
  8.   glLoadIdentity;
  9.   glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  10. end;
  11.  


Erstellen meines PixelBuffers mit der Klasse von Sascha Willems:
Code:
  1.   PixelBuffer := TPixelBuffer.Create(128,128,dc,rc,nil);
  2.   wglShareLists(RC, PixelBuffer.RC);
  3.   PixelBuffer.Enable;
  4.   glClearColor(0,0,0,0);
  5.   glEnable(GL_TEXTURE_2D);
  6.   glEnable(GL_DEPTH_TEST);
  7.   PixelBuffer.Disable;
  8.  

Hoffe ihr seht das wofür ich heute Blind bin( muss das Wetter sein ), notfalls muss ich halt noch mehr Code posten!

Edit: Ach ja, er zeigt nur ein Schwarzes Fenster an!

_________________
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: Di Aug 16, 2005 17:27 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Flushen bzw SwapBuffers wird aber irgendwann aufgerufen oder? ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 16, 2005 18:27 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Flash hat geschrieben:
Flushen bzw SwapBuffers wird aber irgendwann aufgerufen oder? ;)


Ja! Kann auch die Farbe vom Hintergrund ändern, das zeigt er an!

P.s.: Im Ortho Modus zeichnet er!

_________________
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: Di Aug 16, 2005 19:16 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Ok habe das Problem gelößt, und es war so Simpel, das ich mir an liebsten den Schädel einschlagen könnte! Es war mein Far und Near Clipping!

Jetzt habe ich ein neues Problem, das Blenden und alles andere klappt wunderbar, allerdings Flackert es!

Hier der aktuelle RenderCode:
Code:
  1.  
  2.   PixelBuffer.Enable;
  3.   glMatrixMode(GL_PROJECTION);
  4.   glLoadIdentity;
  5.   gluPerspective(45,PixelBuffer.Width/PixelBuffer.Height,nClip,fClip);
  6.   glMatrixMode(GL_MODELVIEW);
  7.   glLoadIdentity;
  8.   glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  9.   glTranslatef(0,0,-6);
  10.   glBegin(GL_TRIANGLE_STRIP);
  11.     glColor3f(1,0,0); glVertex3f(-1,-1,0);
  12.     glColor3f(0,1,0); glVertex3f(1,-1,0);
  13.     glColor3f(1,0,1); glVertex3f(-1,1,0);
  14.     glColor3f(0,1,1); glVertex3f(1,1,0);
  15.   glEnd;
  16.   PixelBuffer.Disable;
  17.  
  18.  
  19.   self.LoadSettings();
  20.   glTranslatef(0,0,-6);
  21.   glBegin(GL_TRIANGLE_STRIP);
  22.     glColor3f(1,0,0); glVertex3f(-1,-1,0);
  23.     glColor3f(0,1,0); glVertex3f(1,-1,0);
  24.     glColor3f(1,0,1); glVertex3f(-1,1,0);
  25.     glColor3f(0,1,1); glVertex3f(1,1,0);
  26.   glEnd;
  27.   SwapBuffers(dc);
  28.  
  29.   glMatrixMode(GL_MODELVIEW);
  30.   glLoadIdentity();
  31.   glMatrixMode(GL_PROJECTION);
  32.   glLoadIdentity();
  33.   glOrtho(0,1,0,1,-1,1);
  34.   PixelBuffer.Bind;
  35.   glDisable(GL_DEPTH_TEST);
  36.  
  37.  
  38.   glEnable(GL_Blend);
  39.   glBlendFunc(GL_ONE,GL_ONE);
  40.     glBegin(GL_QUADS);
  41.         glTexCoord2f(0, 0);
  42.         glVertex2f(0, 0);
  43.         glTexCoord2f(1, 0);
  44.         glVertex2f(1, 0);
  45.         glTexCoord2f(1, 1);
  46.         glVertex2f(1, 1);
  47.         glTexCoord2f(0, 1);
  48.         glVertex2f(0, 1);
  49.     glEnd();
  50.   glDisable(GL_Blend);
  51.   glEnable(GL_DEPTH_TEST);
  52.  
  53.   Result := True;
  54.  

_________________
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: Di Aug 16, 2005 19:18 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Liegts vielleicht daran, dass du
Code:
  1. #
  2. glBegin(GL_TRIANGLE_STRIP);
  3. glColor3f(1,0,0); glVertex3f(-1,-1,0);
  4. glColor3f(0,1,0); glVertex3f(1,-1,0);
  5. glColor3f(1,0,1); glVertex3f(-1,1,0);
  6. glColor3f(0,0,1); glVertex3f(1,1,0);
  7. glEnd;

Als Z-Koordinate 0 gewählt hast, und des somit geclipt wird?

//edit
oh wohl zu spät ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 16, 2005 20:44 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Wenn es flackert, würde ich generell die Genauigkeit des Z-Buffers überprüfen. Wenn du zwei Flächen sehr nahe oder genau aufeinander zeichnest, gibt es Z-Fighting. Hört sich danach an. Hier im Forum gibt's nen Link zu einer schönen kleinen Formel, mit der du dir die Genauigkeit deines Z-Buffers ausrechnen kannst ;).
Ich befürchte mal, du hast als Near-Clipping 0 gewählt. Das ist dann definitiv zu ungenau. Nimm lieber 1 oder noch besser etwas größeres.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 16, 2005 22:03 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Zitat:
Nimm lieber 1 oder noch besser etwas größeres.

das ist vollkommen egal (solange >0), was entscheidend ist ist das verhältnis von near zur farplane. ob der bereich jetzt bei 0.1, 1 oder 100 anfangen sollte hängt nur vom Zahlenbereich ab, mit dem man bevorzugt hantieren will. wobei man allgemein aber schon versuchen sollte den wert soweit wie in dem Zahlenbereich sinnvoll möglich hinauszuschieben um eine größere präzision für weiter entfernte objekte zu erzielen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 16, 2005 22:39 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Grizzly hat geschrieben:
Zitat:
Nimm lieber 1 oder noch besser etwas größeres.

das ist vollkommen egal (solange >0), was entscheidend ist ist das verhältnis von near zur farplane. ob der bereich jetzt bei 0.1, 1 oder 100 anfangen sollte hängt nur vom Zahlenbereich ab, mit dem man bevorzugt hantieren will. wobei man allgemein aber schon versuchen sollte den wert soweit wie in dem Zahlenbereich sinnvoll möglich hinauszuschieben um eine größere präzision für weiter entfernte objekte zu erzielen

Genau das wollte ich damit andeuten :mrgreen:

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 17, 2005 00:00 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Danke, habe es schon gelößt, obwohl ich jetzt ein paar andere Probs habe, aber was macht das schon! :D

Edit: Wie im Quelltext zu sehen ist habe ich beim Testen einmal Swap Buffers zu viel ausgegeben!

_________________
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 Aug 17, 2005 10:26 
Offline
DGL Member

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

Hier ein Bildchen falls es jemanden interessiert. Noch eine Frage habe ich:
Wie rendere ich in OpenGL eine Shadowmap, b.z.w. Tiefentextur?
In DirecX geht das eigentlich relativ einfach, aber in OpenGL? Grund dafür ist das ich das ganze Bluren will, und somit einen Soft Shadow erzeugen will!

Wäre nett wenn die Antwort bald kommt!

Edit: Weiss jemand wo es die Vertexformate beim VBO nachzulesen gibt? Bräuchte das mal 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  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 17, 2005 15:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
das geht auch in ogl recht einfach, schau mal ins tutorial zum pixelbuffer.
was meinst du mit vertexformate nachlesen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 17, 2005 15:43 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Grizzly hat geschrieben:
das geht auch in ogl recht einfach, schau mal ins tutorial zum pixelbuffer.
was meinst du mit vertexformate nachlesen?


Das mit Pixelbuffern ist mir bekannt, verwende die auch Eifrig!
Mit einer Shadowmap meine ich >>sowas<<, das Ganze möchte ich nacher drüberblenden!

Edit: Mit Vertexformat meine ich ein anderes Format als dieses:
Code:
  1.  
  2.   PVertex = ^TVertex;
  3.   TVertex = packed record
  4.     S,T,X,Y,Z : TGLFloat;
  5.   end;
  6.  

Welches für Vertex_Buffer_Object verwendet wird!

mfg

Speedmaster

_________________
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 Aug 17, 2005 16:08 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
was ich meinte war, das im pixelbuffertutorial ganz unten ein anwendungsbeispiel ist, wie man Tiefenwerte in eine Textur rendert. rein vom prinzip her copyteximage2D mit GL_DEPTH_COMPONENT. (Wobei dein beispiel definitiv keine tiefentextur war)

zu den vertexformaten: da besteht zwar die auswahl in den interleaved formaten, aber vom prinzip her kannst du dir relativ aussuschen, was du da pro vertex an attributen reinpacken willst, musst dann nur beim setzen des entsprechenden pointers (glvertexpointer, glNormalpointer...) darauf achten ein entsprechendes offset mit anzugeben


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 17, 2005 17:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Für Rendern in Texturen nimmt man besser die Framebuffer Objekte. Die sind einfacher zu benutzen und auch schneller als PBuffer. Wenn man aber PBuffer benutzen möchte, dann braucht man die Texture nicht mit glCopyTexSubImage kopieren sondern kann den PBuffer mittels wglBindTexImage an ein Texture Objekt binden. Aber Framebuffer Objekte werden mittlerweile auch auf ATI Karten unterstützt und daher braucht man keine PBuffer mehr.
Man kann über EXT_framebuffer_object zusätzlich zu dem normalen Buffer weitere Framebuffer erstellen. An den neuen Framebuffer kann man dann Texturen als Color und DepthBuffer binden. Wenn der Framebuffer aktiviert ist, dann gehen die Ausgaben für die entsprechenden Buffer dann in die angebundenen Texturen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 17, 2005 18:17 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
LarsMiddendorf hat geschrieben:
Für Rendern in Texturen nimmt man besser die Framebuffer Objekte. Die sind einfacher zu benutzen und auch schneller als PBuffer. Wenn man aber PBuffer benutzen möchte, dann braucht man die Texture nicht mit glCopyTexSubImage kopieren sondern kann den PBuffer mittels wglBindTexImage an ein Texture Objekt binden. Aber Framebuffer Objekte werden mittlerweile auch auf ATI Karten unterstützt und daher braucht man keine PBuffer mehr.
Man kann über EXT_framebuffer_object zusätzlich zu dem normalen Buffer weitere Framebuffer erstellen. An den neuen Framebuffer kann man dann Texturen als Color und DepthBuffer binden. Wenn der Framebuffer aktiviert ist, dann gehen die Ausgaben für die entsprechenden Buffer dann in die angebundenen Texturen.


Geht das nicht soweit ich weiss nur auf neuen Karten, oder ist das nur bei NV so?

Dann noch die Tatsache das ich nur noch heute Zeit habe, und mir deshalb die zeit fehlt! :D

Thx für die Antworten!

_________________
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  [ 15 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 16 Queries | GZIP : On ]