Hallo, ich möchte ein Cockpit erstellen. 1. Screen für Opengl 500x500. 2. 3d-Gelände erstellen 3. jetzt möchte ich vor dem 3d-Fenster ein Bild(sprite) setzen als Cockpit. 4. Wenn ich mich über das Gelände bewege soll das Bild immer als Cockpit erhalten bleiben.
Ich nehme an dein Cockpit-Bild hat hat einen Alpha-Kanal, d.h. zusätzlich zu RGB gibt es einen weiteren Farbkanal der die Transparenz speichert. Als Dateiformat eignet sich hier z.B. PNG, zum erstellen reicht GIMP vollkommen. Nachdem du deine 3D-Szene gerendert hast renderst du deine Textur einfach mit aktivem Blending darüber:
Verbesserung: Wenn es große Bereiche gibt die durch die Cockpit-Textur verdeckt werden solltest du vor dem Rendern der 3D-Szene zusätzlich einen Depth-only-Pass ausführen. D.h. du füllst den Z-Buffer zuerst überall dort mit dem kleinst möglichen Tiefenwert wo eben die Textur komplett sichtbar ist. So wird die 3D-Szene nur dort wirklich gerendert wo es auch nötig ist. Im Quellcode oben werden sämtliche glVertex2f(X,Y) zu glVertex3f(X,Y,-1). Des weiteren aktivierst du den Alpha-Test. Nach dem rendern der 3D-Szene renderst du nochmal wie oben beschrieben drüber.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde im zweiten Snippet
Code:
glAlphaFunc(GL_GREATER, 0);
anstatt
Code:
glAlphaFunc(GL_EQUAL, 0);
vorschlagen. Ich verstehe nicht ganz, warum du nur Pixel mit Alpha = 0 rendern willst. Dann würde man ja überall dort, wo die Textur nicht zu sehen ist, einen sehr kleinen Tiefenwert setzen. Das ist doch ziemlich Kontraproduktiv, oder?
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
Öhm.....richtig....*alles zurücknehm und das Gegenteil behaupt* Wie gesagt: "Beware of bugs in the above code; I have only proved it correct, not tried it." trifft es ziemlich gut
Das mit dem "Proved it correct" muss wohl n juristischer "Beweis" gewesen sein
Übrigens versteh ich nicht ganz, wieso zuerst nur der Tiefenbuffer gefüllt wird. Wärs nicht sinnvoll, gleich die Textur zu rendern? [edit]ok. habs kapiert. soll ja nicht alles nur ganz oder gar nicht transparent sein[/edit]
Mitglieder in diesem Forum: 0 Mitglieder und 14 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.