Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Ich wollte mein Projekt mit Hilfe von Blending ein bischen aufbessern,
leider funktioniert da gar nichts.
Erst dachte ich das Unit glBMP mit der ich die Texturen lud daran schuld war,
dies erwies sich aber als falsch da es mit einen API-Template gut funktionierte.
Also liegt es scheinbar daran dass ich in der VCL irgend etwas noch nicht geladen oder eingestellt habe. Leider komme ich nicht darauf was das ist.
Ich habe das Problem nochmal erfolgreich mit einem neuen einfachen Projekt nachgestellt.
Vielleicht findet ihr ja herraus was fehlt.
Mfg
IFlo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Registriert: Mi Aug 20, 2003 09:15 Beiträge: 70 Wohnort: Italien
Das Problem liegt darin, dass der Stein und das Gras komplet übereinanderliegen und OpenGL 2 Flächen nur ineinander blendet, wenn die eine hinter der anderen liegt. Hier kann die GraKa nicht unterscheiden, welche Fläche wohin geblendet werden soll.
Lösungen: entweder schaltest du den Tiefentest der GraKa aus (glDisable(GL_DEPTH_TEST); ),
oder du schiebst die eine Fläche etwas nach vor die andere (glTranslatef(0,0,0.001); ).
Dieses Problem wäre ideal lösbar mit Multitexturing (siehe Tutorial).
_________________ "Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt" Albert Einstein
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Danke tyr,
in dem nachgestellen Projekt funktionieren deine LösungsVorschläge wunderbar.
Leider kann ich diesen Trick schlecht in meinem richtigen Projekt umsetzen.
Aber ich glaube das Multitexturing-Turial mir weiterhelfen kann.
IFlo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Wenn man ohne Multitexturing mehrere Texturen auf eine Fläche blenden will, dann kann man ab dem 2.Renderpass den Tiefentest auf gl_lequal stellen. Dadurch werden dann auch Punkte anzeptiert die genau auf den alten liegen. Außerdem kann man im zweiten Renderpass auch darauf verzichten den Tiefenwert zu schreiben und gldepthmask(false) verwenden.
Das geht mit einer beliebigen Anzahl von Texturen. Mit 2.Renderpass meinte ich das 2.Mal Zeichnen. Wenn man gldepthfunc(gl_lequal) setzt, kann man beliebig oft drüberzeichen. Man sollte aber auf ATI Karten nie gl_equal verwenden, wie das nicht mit dem hierachischen ZBuffer dieser Karten zusammen funktioniert.
In den allermeisten Fällen ist Multitexturing schneller.
Eine Ausnahme ist, wenn wenig Geometrie gezeichnet wird und es vorkommt, daß viele Pixel verdeckt werden. Dann erkennen neuere Karten anhand des ZBuffers, daß die 2.Texture bei den verdeckten Pixeln überhaupt nicht gezeichnet werden muß und lesen sie dementsprechend auch nicht aus. Das fällt vermutlich aber erst bei längeren Shadern ins Gewicht. Ob es bei 4 Texturen und in deiner speziellen Situation gilt, weiß ich nicht. Eventuell könnte man erst eine Texture zeichnen und im zweiten Pass, dann die restlichen drei über Multitexturing, aber so viel wird es vermutlich nicht bringen.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
@LarsMiddendorf heißt das mein Spiel würde dann auf Rechnern mit ATI Karten nicht laufen?
Das mit dem Multitexturing funkioniert nicht ganz so wie ich wollte.
Ziel:
Ich möchte eine Landschaft zeichnen, welche Höhenunterschiede hat.
Ich wollte eigentlich mit hilfe von Blending vier Texturen jeweils von einer Ecke aus ineinander verlaufen lassen. Es sollten also 4 Texturen die nur an einer Ecke voll sichtbar sind übereinander gezeichnet werden, so dass eine nichtdurchsichtige Textur entsteht.
Ergebnis:
Alle meine anderen Texturen hatten die Falsche Textur, und die Landschaft hatte keine überläufe sondern nur Teilweise vermixte Texturen.
Mfg
IFlo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Nein, nur die Leistungs der Karte würde nicht voll ausgenutzt. Bei einer Landschaft mit vielen Dreiecken würde ich dann auch eher Multitexturing nehmen anstellen von Blending. Dann brauchst du die Landschaft nur einmal zeichnen.
Die Blendfaktoren kannst du dann in der Vertex Farbe speichern.
Schöner wäre, wenn man für jede der 4 Texturen den Faktor jeweils in r,g,b,a unterbringen könnte, nur dann würde normales Multitexturing nicht mehr ausreichen und man müßte Shader verwenden.
Hier ist ein Artikel wo das mit 3 Texturen gemacht wird:
http://www.delphi3d.net/articles/viewarticle.php?article=terraintex.htm
In dieser Demo wird der Faktor für Texture0 in rgb, und der Faktor für Texture1 im Alpha Wert gespeichert. Der Faktor für Texture2 ist dann die Differenz der beiden Werte bis zu 1. Für 4 Texturen könnte man die zweite Farbe mitverwenden und dort auch nochmal einen Blendfaktor unterbringen.
Mitglieder in diesem Forum: Bing [Bot] und 5 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.