Hi,
folgendes Problem, dass ich einfach nicht lösen kann.
Ich zeichne ein Spielfeld (alles 2D) bestehend aus Quadraten mit einer Textur. Ich möchte nun, dass die Textur so wie sie im Original ist, erhalten bleibt. Also keine Farbveränderung.
Zum Texturenladen benutze ich die Textures.pas , die auch in den Tutorails vorkommt.
Das Problem ist jetzt, dass ich einen eigenen Mauszeiger einbauen wollte. Ich zeichne also an der Stelle, an der sich die Maus befindet ein Qudrat mit einer Textur drauf. Nun sieht man aber die Farbe des Quadrats an all den Stellen, an der die Textur transparent sein soll. Es soll aber nicht ie Farbe des Quadrats sichtbar sein, sondern alles andere, was darunter gezeichnet wird, inkl. der Texturen.
Ich hab ein bisschen mit den Einstellungen rumgespielt in der Textures.pas , jedoch ist es nicht möglich beides zu erreichen.
Wenn ich glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) benutze, dann wird zwar der Cursor richtig dargestellt, aber alles andere is im Po.
Wenn ich nun glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL) nehme, wird alles richtig dargestellt, bis auf den Mauszeiger der einen Hintergrund in der Farbe des Quadrats, auf dem die Textur ist, hat.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Denke auch, dass ein Alpha-Test wohl eher das richtige sein sollte: http://wiki.delphigl.com/index.php/GlAlphaFunc Irgendwo schwebt im Netz auch ein Beispiel für dessen Einsatz rum. Am einfachsten wird es wohl sein etwas wie PNG zu nehmen, was einen Alpha-Channal hat und diesen einfach dafür zu mißbrauchen.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Du scheinst nicht zu verstehen wo das Problem ist. Das transparent mit der Alphafunc funktioniert ja auch einwandfrei. Nur beim Mauscursor ist das Problem, dass man dann die Farbes des QUADRTS sieht und nicht den Untergrund. Is ja auch agnz logisch dass es so ist.Soll aber nicht.
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
ich muss zugeben, dass mir aus der Beschreibung jetzt nich ganz klar ist, wie das Problem genau aussieht.
vll. könntest du dazu mal nen Screenshot und/oder dazugehörigen code posten?
weil soweit ich das verstanden habe müsste das alphatest oder glblend mit entsprechenden functionparametern und nem gescheiten Alphachannel eigentlich tun.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Und genau das sieht für mich alles nicht nach einem Alpha-Test aus, zumal ich nämlich beim ersten Bild keinerlei Transparenz erkennen kann. Achtung nur für den Fall, dass es untergegangen ist: Ich rede nicht von Blending, sondern von einem Alpha-Test.
Code:
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1);
Zusammen mit einem Bild (sowie einen Loader) der einen Alpha-Channel beinhaltet (Achtung, esmuss auch RGBA statt RGB geladen werden), sollte einen gewünschten Effekt erzielen. Deswegen frage ich nochmal explizit nach, ob das Alpha-Test bei Dir nicht funktioniert. Ansonsten... vielleicht komme ich Sonntag nochmal kurz dazu ein kleines Beispiel zu schreiben.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Das Decal bzw. Modulate bezieht sich auf die Überblendung zwischen der aktuellen Farbe und der aktuellen Texture und nicht mit dem Hintergrund. Dafür ist glBlendFunc da, falls du das erreichen willst.
Alphatest ist an. Aber der AlphaTest rendert doch nur bestimmte Teile der Textur(!!). Bei dem Teil, der Transparent ist, seht man doch dann das Quadrat!? Oder etwa nicht?
Denn genau das passiert bei mir.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Versuchs mal die Reihenfolge:
Zeichene Szene komplett mit Textur
Aktiviere Alphatest
Zeichne Cursor
Deaktiviere Alphatest
Wenn dein Alphakanal ordentlich gelegt ist, werden all die Teile die unsichtbar sind auch wirklich nicht gezeichnet. Dadurch wird die Sichtbare Form des 4Ecks auf den Teil beschränkt, der Texturiert ist. Ein Viereck sieht man also nicht mehr.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also zum Verständnis ein Alphatest lässt nicht einfach Teile der Textur weg und zeichnet an den Stellen dann das Quad. Die Textur und das Quad vermischen sich zu einer Einheit. Das soll bedeuten die Farbe des Quads und der Textur verbinden sich. Und ein Alphatest lässt somit die Teile des Quads weg.
Aber zum Thema maus. Ich habe auch schon mal ein Mauscursor gerendert und nur weil er einen weichen Rand hatte habe ich mit blending gearbeitet. Sonst hätte der Alphatest ausgereicht. Wenn deine Textur einen richtigen Alphakanal hat und das alles richtig geladen wurde sehe ich da auch überhaupt kein Problem. Evtl solltest du mal schauen ob das alles richtig ist, dann sollte Alpha bzw Blending vollkommen ausreichen.
Natürlich immer vorrausgesetzt ich habe dein Problem richtig verstanden. Wobei ich mir da gerade nicht so sicher bin.
Also wenn auch das Quad transparent werden müsste, dann stimmt bei mir was nicht. Bin mir sicher dass ich den Alphakanal richtig gesetzt habe, zumal ads nicht die erste Textur ist. Nur leider sieht man da immer die Farbe des Quads, an der Stelle die durchsichtig sein müsste :/
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Funktioniert also definitiv. Habe hier zwar nur FPC zur Hand, aber ich denke an des angehängten Beispieles solltest Du es schnell mit Delphi kompiliert bekommen. Die Textur enthält einen Alpha-Channel und Du solltest die schrift sehen. Der Hintergrund wird mit einem dunklen rot gerendert und dahinter befindet sich noch ein blaues Dreieck. Hoffe, dass hilft Dir weiter.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
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.