Leider kann ich das nicht wirklich umsetzen. Das Problem ist vorallem, dass ich nur einen "einfachen" Textureloader habe, der halt ein BMP Bild läd aber dazu noch ein Alphabild hinzufügen geht nicht. Gibt es denn eine Möglichkeit wenn ich beide Bilder einzeln lade und diese dann im Code so anzuwenden, dass das Masking trotzdem funktioniert?
Registriert: Di Mai 10, 2011 19:00 Beiträge: 43
Programmiersprache: FreePascal , C++
Versuchs mal so wie das im Tutorial "Verblendet" im Wiki (Tutorial_Lektion_7) beschrieben ist. Da ist glaube ich der Unterpunkt 1.3.1 (Welt unter einer Maske) das richtige für dich.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ohne einen Alphakanal wirds halt schwierig. Wenn du keine Graustufen laden kannst zumindest. Dann könntest du mit GL_MODULATE noch was frickeln, aber das ist echt nicht schön. Solltest eher Support für mehr Kanäle einbauen oder halt auf Bibliotheken wie Lossy's glBitmap (für alles Pascaloide) oder SDL_Image (sonstige) umsteigen.
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
Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Hm okay... Ich hatte mir halt mal selber einen kleinen Loader geschrieben aber der kann halt nur bmp's einlesen - sicher nicht das modernste, ich weiss. Dann schau ich mich mal nach was modernerem um und dann wird das wohl auch klappen.
Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Ich konnte meinen Textureloader nun selber erweitern - und das war eig. garnicht mal so schwer Klappt nun also alles! Aber trotzdem danke an euch für die Hilfe - ihr seid echt eine tolle Community hier
Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Ich muss das Thema wegen eines Problems wohl nochmal hochschieben.
Wenn ich nun z.B. 2 Objekte mit dem Masking rendere und mich auf eine Linie mit den beiden Objekte stelle, dann sehe ich nur das Objekte, welches ich auch zuerst gerendert habe! Um das mal ein klein wenig grafisch zu zeigen:
ICH => OBJEKT A => OBJEKT B
Objekt A wird zuerst gerendert, danach Objekt B => Ich sehe beide Objekte. Würde man nun A und B tauschen, dann sehe ich nur Objekte B. Mir ist durchaus bewusst warum das passiert nur wüsste ich gerne wie man das Problem einfach löst?
Du benutzt Alpha-Blending mit "glEnable(GL_BLEND)" oder? Da ist es nämlich ganz normal was bei dir passiert. Das Problem ist, dass das 1te Objekt in den Tiefenbuffer schreibt und beim 2ten Objekt dann der Tiefentest fehlschlägt. Zur Lösung des Problems sortiert man die Objekte und zeichnet erst die am weitesten entfernten. Wenn man nur additives Blending verwendet, kann man auch das schreiben in den Tiefenbuffer verhindern (glDepthMask(false)). Außerdem gibt es noch "Depth Peeling", was allerdings ein bisschen komplizierter ist.
Oder man verzichtet auf Blending und verwendet nur den Alpha-Test. Mit dem werden einfach Pixel mit niedrigem Alphawert nicht gezeichet, aber alle Objekte sind undurchsichtig.
Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Nein ich nutze kein glBlend. Ich habe eine normale Texture und eine Alphatexture, die lade ich zusammen und mache mir daraus letztendlich eine RGBA Texture. Dann kann ich meine fertige Texture ganz normal binden und aufs Objekt packen ohne noch was mit dem blending zu machen.
Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Naja ich habe das alles in einer Displaylist aber bevor die Dinge dort hineinkommen, werden Sie ja über glDrawArrays dargestellt und das wird ja auch erstmal nach und nach abgearbeitet. Und wenn da nun das Objekt mit dem Masking Effekt gerendert werden aber danach noch andere Objekte folgen sieht man diese halt nicht
Ich versteh' leider noch nicht so ganz was du unter "Masking" verstehst. Hast du mehrere Objekte auf der gleichen Position und benutzt den Alpha-Test um bestimmte Teile zu überdecken?
Registriert: Di Aug 09, 2011 07:33 Beiträge: 163
Programmiersprache: C/C++
Okay ich zeig das mal besser mit Bildern! Meine 2 Beispieltexturen:
Hier sieht man die fertige Texture nach dem laden 2 mal gerendert:
Wobei auffällt, dass die hintere Palme nicht richtig dargestellt werden kann. Würde ich mich nun so umpositionieren, dass ich hinter der anderen Palme wäre, könnte man hingegen die erste Palme sehen. Hoffe man versteht es nun
Edit// Okay hab das Problem mit GL_ALPHA_TEST gelöst bekommen!
Mitglieder in diesem Forum: Bing [Bot] und 7 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.