Registriert: Mo Aug 15, 2005 11:45 Beiträge: 29 Wohnort: Neuenkirchen
Hallo,
offen gestanden wusste ich nicht so recht, in welches Forum ich diesen Beitrag stellen sollten. Dann habe ich mich mal für dieses hier entschieden !
Also ich habe eine Frage zu dem GLSL Tutorial von Sascha Willems auf der wiki.delphigl.com Seite.
Hier wird, ziemlich weit unten, ein Beispiel gezeigt, in dem 4 Texturen (RGB / Wasser / Sand / Gras) über die Shader verarbeitet werden. Soweit - sogut !
Nun würde mich aber interessieren, wie ich mit den Texturen in C++ arbeiten muss (Einbinden, Aufrufen, etc.). Denn leider habe ich bislang kein geeignetes "Komplett-Beispiel" hierzu gefunden.
Vielleicht kann mir ja jemand von euch hierbei ein wenig unter die Arme greifen, oder mir evtl. sagen in welche Richtungen ich meine "Google-Suchen" verfeinern sollten. Denn den Shadercode ansich habe ich soweit wohl verstanden - zumindest hoffe ich das !
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Auf meiner Seite hab ich mal ne Demo zur Anleitung von Sascha gemacht. Die is zwar auch in Delphi geschrieben, aber wenn du dir den Code mal anschaust, dürfte eigentlich (wie immer bei OGL-Codes) alles leicht zu portieren sein.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
schau mal auf nehe oder auf die deutschen übersetzungen von den tutorials auf http://www.joachimrohde.com/. dort müssten entsprechende tutorials zu finden sein
Registriert: Mo Aug 15, 2005 11:45 Beiträge: 29 Wohnort: Neuenkirchen
Mmh, die NeHe Tutorials kenne ich wohl. Das Problem ist vielmehr, dass diese ja reine OpenGl Anwendungen erklären und hierbei keine Shader berücksichtigen. Und das Texturen-Handling ist ja bei der Verwendung von Shadern ein wenig anders.
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
das texturhandling unterscheidet sich fast überhaupt nicht. Der einzige unterschied ist, dass du die nummern der verwendeten texturunitsüber glUniform*ARB in samplervariablen des fragmentshaders übergibst
ach ja und zum thema nehe: http://nehe.gamedev.net/data/articles/article.asp?article=21
Registriert: Mo Aug 15, 2005 11:45 Beiträge: 29 Wohnort: Neuenkirchen
So, ich habe mir das alles nochmal angeschaut, nur leider mit wenig Erfolg.
Mir ist nach wie vor klar, wie ich mit den Texturen in den Shadern arbeiten muss. Nur am OpenGL Programm hapert es noch ein wenig.
Es gibt ja verschiedene Befehle, die ich in diversen Beispielen schon gefunden habe:
Oben genannte brauche ich ja auf jedenfall. Aber wo und wie muss ich jetzt meine Textur einbinden, z.B. eine textur.jpg ?
Sorry das ich mich so "dumm" anstelle, nur ist das alles komplettes Neuland für mich und ich muss mich erstmal zurecht finden !
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
versteh ich das richtig, dass dein problem nichts mit dem shader zu tun hat, sondern nur das laden von texturen ist?
in dem fall such dir bei nehe ein Tutorial zum thema texture mapping.
ansonsten ist mir nicht ganz klar, wo genau das problem liegt
Registriert: Mo Aug 15, 2005 11:45 Beiträge: 29 Wohnort: Neuenkirchen
Heisst das denn, das ich so oder so eine "Hilfsfunktion" z.B. LoadTexture() brauche um eine Textur laden zu können ?
So habe ich das nämlich nun verstanden...
Alternativ kannst du dir natürlich auch selber nen Loader schreiben
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Du kannst dir diese Hilfsfunktion oder Hilfsklasse auch selbst schreiben. Beispielsweise ein Bitmap oder eine TARGA-Datei zu laden ist nicht weiter schwierig. Bei PNG und JPEG wird es schon schwerer. Schau dir einfach mal die Datei-Spezifikationen an.
Hast du die Daten im Arbeitsspeicher musst du nur noch glTexImage2D oder gluBuild2DMipmaps aufrufen und eventuelle Texturparameter setzen. Dann kannst du die Texturen mittels des OpenGL-Namens, den dir glGenTextures liefert eindeutig identifizieren und mittels glBindTexture binden.
Dieses Thema wird in einem Einsteigertutorial von uns behandelt. Dort kannst du gern noch einmal nachblättern. Lass
Alle Hilfsfunktionen bzw. Hilfsklassen machen nichts weiter als diese Funktionen möglichst so einfach zu kapseln, dass man Texturen mit wenigen Aufrufen laden und nutzen kann.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Mo Aug 15, 2005 11:45 Beiträge: 29 Wohnort: Neuenkirchen
Hallo,
ich bin`s mal wieder !
So, zunächst einmal danke für die vorhergegangenen Antworten. Ich habe nun einen gut zu gebrauchenden TextureLoader gefunden, der all das macht, was ich von ihm möchte ! Juppie !
Nun komm ich aber direkt zum nächsten Thema: Ich habe nun z.B. ein rechteckiges Bild (Textur) mit 256x256 Pixeln. Durch den Fragmentshader wird bei diesem Bild eine Art "Weichzeichnugsfilter" durchgeführt. Nun ist die Frage "Was mache ich mit dem Ergebnis ?".
Gibt es eine Möglichkeit das neu generierte Bild abspeichern zu lassen ?
Registriert: Mo Aug 15, 2005 11:45 Beiträge: 29 Wohnort: Neuenkirchen
Hallo,
ich habe mir das nun alles mal angesehen und mir ist das noch nicht so wirklich klar.
Ich habe ein OpenGL Fenster mit einem Bildchen 256x256 Pixel, dieses möchte ich nun gerne als neues Bitmap abspeichern.
Kann mir wohl jemand die notwendigen Schritte in eigenen Worten erklären ?
Aus den Dokumentationen von glReadPixel und glGetTexImage bin ich noch nicht so wirklich schlau geworden.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also glReadPixel ließt die angezeigten Pixel (des Fensters) in einen Speicherbereich und glGetTexImage liefert dir den Inhalt der Textur zurück. Bei glGetTexImage spielt es keine Rolle ob die Textur dargestellt wird oder nicht. Solltest du einen PixelBuffer oder ein Framebuffer Object benutzen so liefert dir glGetTexImage den Inhalt des entsprechenden Objektes zurück. Wenn ich Grizzly richtig verstanden habe. (Habe das selber noch net gemacht).
Wenn es wenigstens ein wenig auf Geschwindigkeit ankommt würde ich wohl den Weg über PixelBuffer bzw. FrameBuffer Object wählen und dann mit glGetTexImage mir die Textur zurückgeben lassen.
Wenn aber Geschwindigkeit sehr egal ist kannst du Problemlos mit glReadPixel arbeiten. Dadurch kannst du die Verwaltung der OpenGL Objekte sparen.
Den Speicherbereich müsstest du dann wieder laut Fileformatspezifikation auf die Platte schreiben und dann haste nen Bild.
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.