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 ):
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.
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.
glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
glTranslatef(0,0,-6);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1,0,0); glVertex3f(-1,-1,0);
glColor3f(0,1,0); glVertex3f(1,-1,0);
glColor3f(1,0,1); glVertex3f(-1,1,0);
glColor3f(0,1,1); glVertex3f(1,1,0);
glEnd;
PixelBuffer.Disable;
self.LoadSettings();
glTranslatef(0,0,-6);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1,0,0); glVertex3f(-1,-1,0);
glColor3f(0,1,0); glVertex3f(1,-1,0);
glColor3f(1,0,1); glVertex3f(-1,1,0);
glColor3f(0,1,1); glVertex3f(1,1,0);
glEnd;
SwapBuffers(dc);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,1,0,1,-1,1);
PixelBuffer.Bind;
glDisable(GL_DEPTH_TEST);
glEnable(GL_Blend);
glBlendFunc(GL_ONE,GL_ONE);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(1,0);
glTexCoord2f(1,1);
glVertex2f(1,1);
glTexCoord2f(0,1);
glVertex2f(0,1);
glEnd();
glDisable(GL_Blend);
glEnable(GL_DEPTH_TEST);
Result :=True;
_________________ 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.
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'."
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
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
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Danke, habe es schon gelößt, obwohl ich jetzt ein paar andere Probs habe, aber was macht das schon!
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.
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.
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:
PVertex =^TVertex;
TVertex =packedrecord
S,T,X,Y,Z : TGLFloat;
end;
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.
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
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.
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!
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.
Mitglieder in diesem Forum: 0 Mitglieder und 12 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.