DGL https://delphigl.com/forum/ |
|
Shader, Texturen und C++ https://delphigl.com/forum/viewtopic.php?f=20&t=4527 |
Seite 1 von 3 |
Autor: | Seppel [ Do Sep 01, 2005 13:32 ] |
Betreff des Beitrags: | Shader, Texturen und C++ |
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 ! ![]() Mfg Sebastian !!! |
Autor: | La Boda [ Do Sep 01, 2005 13:42 ] |
Betreff des Beitrags: | |
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. |
Autor: | Grizzly [ Do Sep 01, 2005 14:50 ] |
Betreff des Beitrags: | |
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 |
Autor: | Seppel [ Do Sep 01, 2005 15:17 ] |
Betreff des Beitrags: | |
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. |
Autor: | Grizzly [ Do Sep 01, 2005 19:54 ] |
Betreff des Beitrags: | |
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 |
Autor: | Seppel [ Sa Sep 03, 2005 17:14 ] |
Betreff des Beitrags: | |
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: glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture0); //neu glUniform1iARB(glGetUniformLocationARB(p, "Texture0"), 0); 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 ! ![]() Mfg Sebastian |
Autor: | Grizzly [ Sa Sep 03, 2005 21:04 ] |
Betreff des Beitrags: | |
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 |
Autor: | Seppel [ Mo Sep 05, 2005 11:52 ] |
Betreff des Beitrags: | |
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... |
Autor: | La Boda [ Mo Sep 05, 2005 11:57 ] |
Betreff des Beitrags: | |
Jepp, sowas brauchst du... *im Netz sucht* Texture-Loader von NeHe Alternativ kannst du dir natürlich auch selber nen Loader schreiben |
Autor: | Magellan [ Mo Sep 05, 2005 18:00 ] |
Betreff des Beitrags: | |
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. |
Autor: | Seppel [ Fr Sep 09, 2005 11:11 ] |
Betreff des Beitrags: | |
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 ? Mfg & Ein erholsames Wochenende Sebastian |
Autor: | Grizzly [ Fr Sep 09, 2005 13:53 ] |
Betreff des Beitrags: | |
http://wiki.delphigl.com/index.php/Screenshot wär eine möglichkeit, wenn du das ganze auf dem bildschirm hast. ansonsten über pixelbufferobjects oder GL_EXT_framebuffer_object in eine texture rendern und mit GlGetTexImage aus der graka holen |
Autor: | Seppel [ Fr Sep 09, 2005 14:59 ] |
Betreff des Beitrags: | |
Mmmh, danke. Das sind doch schon mal ein paar Ansätze. Werde mich gleich mal am Montag damit auseinandersetzen. Nun ist erstmal Wochenende ! ![]() Mfg Sebastian |
Autor: | Seppel [ Di Sep 13, 2005 12:01 ] |
Betreff des Beitrags: | |
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. Mfg Sebastian |
Autor: | Lossy eX [ Di Sep 13, 2005 12:26 ] |
Betreff des Beitrags: | |
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. |
Seite 1 von 3 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |