Ich habe eine Frage für glReadPixels() und glDrawPixels().
Ich möchte ein Bild einlesen und dann gedreht auf
das Bild zeichnen. Ich habe schon viel versucht.
Kann es sein, dass das drehen der Matrix mit
glRotate*() nicht funktioniert, weil es sich um Pixels handelt?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hallo uns willkommen im Forum. Ich habe das mal von andern Thema getrennt, da es eigentlich eine neue Frage ist.
Das was du möchtest ist klassisches RenderToTexture. Denn glReadPixels und glDrawPixels arbeiten direkt auf dem FrameBuffer. Also das worin gezeichnet wird. Und wenn du es drehen möchtest dann bleibt nur die Möglichkeit das Bild als Textur zu benutzen und diese dann zu drehen.
Aber zu RenderToTexture solltest du mal auf der Seite von Sascha schauen. Dort findest du ganz unten ein Beispiel zu RenderToTexture.
Wenn du etwas erfahrener bist dann kannst du dir auch mal das Framebuffer Object Tutorial anschauen. Allerdings ist das ein großerer Programieraufwand und nicht so leicht zu verstehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also nur um das mal klar zu sagen. Das was du machen möchtest ist eine allgegenwärtige Aufgabe in OpenGL. Also ganz und gar nichts ungewöhnliches. Falls du also Fragen zum Verständnis oder sonst irgendwas hast, dann tu dir keinen Zwang an. Dafür sind wir ja schließlich da.
Ja du kannst es auch so lösen, dass du den Inhalt mittels glReadPixels ausliest und diesen dann mittel glTexImage2D oder glTexSubImage2D an eine Textur übergibst. ABER. Davon kann ich nur abraten. Denn glReadPixels ist viel zu langsam dafür. Besser wäre es, wenn du glCopyTexImage2D dafür verwendest. Das ist vom Prinzip her genau das Gleiche nur in einem einzigen Schritt. Damit kann die Grafikkarte das wesentlich besser optimieren bzw der Speicher muss die Grafikkarte auch nicht verlassen was einen enormen Geschwindigkeitsvorteil bringt.
Zur Benutzung. Ich weiß jetzt nicht genau wie viel du schon weißt. Falls Lücken sind. Siehe erstes Kapitel. Um es benutzen zu können benötigst du eine vollständig initialisierte und erstellte Textur. Der Speicher für die Textur muss auch schon alloziiert sein. (glTexImage mit nil als DatenPointer) und glCopyTexImage kopiert anschließend den Framebuffer (das worin du zeichnest) in die gerade gebundene Textur. Bitte beachte, dass die Größe der Textur in den meisten Fällen eine Potenz von 2 haben sollte. Für den Anfang solltest du aber grundsätzlich immer mit einer Potenz von 2 arbeiten.
Falls du nicht genau weißt wann und wie du da was machen sollst hilft es uns, wenn du ein mal etwas Code von dir postest. Dann können wir dir auch sagen wie und wo das was gemacht werden sollte.
PS: Eine Matrix ist in OpenGL typischerweise etwas ganz anderes. Technisch gesehen stimmt es zwar irgendwo. Aber du solltest dir nicht angewöhnen zu den Texturdaten Matrix zu sagen. Das mag später den ein oder anderen ziemich verwirren.
Im DGL Wiki steht eben nichts darüber, dass man
(für solche Zwecke) für glTexImage2D() als letzten
Parameter 'nil' (bzw. 'NULL' für C) einsetzen kann.
Auch ist im Tutorial für Texturen die Reihenfolge meiner
Meinung nach nicht ganz klar definiert.
Dafür sind "Tapeten" aber schon anschaulich
und gut verständlich.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.