Hallo zusammen, ich bin neu hier im Forum und habe direkt folgendes Problem:
ich habe eine Menge von Daten im Bereich [0,1]³, die ich gerne in Abhängigkeit von dem x-Wert auf eine Fläche von 256 x 1 projezieren würde.
Also angenommen ich habe einen Punkt p(0.2, 0.6, 0.21), dann soll dieser Punkt p auf der Fläche bei (0.2 *255 +0.5, 0.5) sein. Deswegen verwende ich statt einer perspektivischen Projektion eine orthogonale Projektion mit gluOrtho2D(left,right,bottom,top) also gluOrtho2D(0,256,0,1). Der Tiefenwert des Punktes interessiert mich danach nicht mehr deswegen auch die orthogonale Projektion. Den Viewport habe ich genau auf 256 x 1 gestellt. Als ModelviewMatrix habe ich die Einheitsmatrix genommen, da sich die Daten im Bereich [0,1]³ befinden. Könnte das der Fehler sein?
Blöderweise kommen bei mir viele Dinge auf einmal zusammen, weswegen ich euch mit meinem Spaghetticode nicht in den Wahnsinn treiben wollte und erstmal nur fragen möchte, ob der Gedanke so richtig ist, da ich bisher nicht mehr sehe als ein schwarzes Bild.
Ich hoffe ihr könnt mir helfen, danke schonmal im voraus.
Ich verstehe nur schwerlich dein Problem (welches du hast, nicht wieso du es hast).
Ich nehme mal an du hast
Code:
glViewport(0, 0, 256, 1);
aufgerufen und dann den Punkt gezeichnet. Wenn das der Fall ist: dann zeichnet OpenGL quasi nur unten und dort befindet sich dann wohl auch in der Punkt (schwer erkennbar wenn er am Rand ist, dies sollte aber so oder so geändert werden, du willst ja das ganze Fenster ausnutzen oder?).
Code:
gluOrtho2D(0,256,0,1)
Solltest du das aufgerufen haben und dein Fenster ist 256 Pixel breit und 1 Pixel hoch, dann bedeutet das, das(s) die Koordinaten die du mittels glVertex3f (alternativen einbezogen) oder per VBO übergibst, Pixelgenau sind. Beispiel:
Code:
glBegin(GL_POINTS); glVertex2f(15.0, 0.0); //beachte das ich hier 2f nicht 3f nutze glEnd();
zeichnet einen Punkt (Standardgröße wäre NUR ein Pixel) 15 Pixel vom linken Fensterrand entfernt.
Ohne Code wird es zudem schwierig den Fehler zu finden. Wenn du Spagetthicode (ich gehe mal davon aus das heißt das du ziemlich durcheinander verschiedene Dinge unordentlich geschrieben hast) produzierst, dann kann schnell mal der Fehler an einer GANZ ANDEREN Stelle sein als man ihn vermutet. Auch wäre (für mich) eine einfachere Beschreibung dessen was du machen möchtest hilfreich.
Danke schonmal, dass du überhaupt geantwortet hast
Es gibt bestimmt noch viele andere stellen im code die falsch sein könnten, und deswegen versuche ich (mit deiner bzw. eurer Hilfe) gerade Schritt für Schritt den Fehler zu finden.
Also ich möchte nur eine Textur beschreiben, die 256 x 1 groß ist und nichts im Fenster angezeigt beommen. Dazu habe ich ein FBO mit dazugehöriger Textur erstellt. Am Ende soll kein Bild oder sowas entstehen. Ich missbrauche sozusagen nur Operationen, die man mit Texturen usw. anstellen kann . Und demnach sollte es von der Überlegung her doch eigentlich richtig sein was ich mir gedacht habe oder? Also das mit dem Viewport hab ich wirklich so gemacht wie du es vermutet hast. Oder kann es sein, dass ich gar nicht richtig in die Textur rendere?
Hier paar Ideen: 1. nutze glIsTexture um herauszufinden ob die Textur richtig erstellt wurde http://wiki.delphigl.com/index.php/glIsTexture 2. verändere den Viewport glViewport(0, 0, 256, FENSTER_HOEHE); (behalte aber die Parameter in glOrtho2D bei) 3. verändere die Koordinaten die du übergibst (z.B. versuch mal für y 1 statt 0) 4.a ist "Texturing" überhaupt "enabled"? glEnable(GL_TEXTURE_2D); 4.b kannst du sicher sein das du es nicht irgendwo ausversehen "disabled" hast? 4.c ist die Textur auch gebunden? glBindTexture(GL_TEXTURE_2D, TexturID); 5. renderst du vielleicht ins "leere"? Das könnte passieren wenn du die Matrix manipuliert hast (glRotatef, glTranslatef, glScalef)
Da ich nicht weiß wie erfahren du bist sind jetzt auch paar Fehler drinne die später selten vorkommen sollten.
Danke für die vielen Tipps. ich werd sie sofort ausprobieren. Hab die ganze Zeit damit verbracht gDEBugger zu installieren und irgendwie zu verwenden, aber bisher ist es mir noch nicht gelungen. Also ich muss sagen, dass ich leider nicht sehr erfahren bin, aber ich kann trotzdem schonmal einige punkte ausschließen. Aber es schadet ja nicht nochmal alles durchzutesten Nochmals vielen herzlichen Dank
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Was ich mache, wenn ich FBOs debuggen will, ich schalte alles aus (shader (wenn möglich), texturing etc) und rendere einfach nur ein weißes Quad ins FBO. Dann zeichne ich mir das irgendwo aufs Fenster oder lade mir den Inhalt mit glGetTexImage2D in den RAM. Dann weiß ich zumindest, ob das Zeichnen Koordinatentechnisch aufgeht (ruhig etwas größer zeichnen das Quad).
Wichtige Dinge, die du beim Erstellen der Textur (für das FBO) beachten solltest, immer einen anderen Filter angeben oder Mipmapping aktivieren. Sonst wird diese Textur nicht gezeichnet weil die Mipmaps fehlen, also:
Code:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // oder GL_LINEAR oder so glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Geh auch die üblichen Verdächtigen durch, wie Backfaceculling, Tiefentest et cetera. Vielleicht hilft dir auch dieser Sammelthread weiter.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
ich weiß nicht warum aber der tipp erst einfach primitve rendern hat geklappt. Wahrscheinlich hats sogar vorher schon geklappt, nur da ich meine vertexdaten aus nem VBO beziehe habe ich dort wahrscheinlich einen fehler und nicht bei der projektion selber. Also nochmals viel dank an euch beide
Mitglieder in diesem Forum: Google [Bot] und 8 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.