Idee zum Markieren der Spielerfarbe
-
eine farbe setzen bei directX z.b. mit Texturefactor und die farbe mit der texture mittels des alphachannels der texture blenden.
rapso->greets();
-
Cool, versuche ich gleich mal. Danke!
-
Ich hab jetzt bei dieser Methode noch das Problem, dass die Farbmarkierung nicht mehr abhängig von Licht und Schatten ist. Ich hab das AlphaOperation auf SelectArg1, wobei Arg1 das TFactor ist. Die ColorOperation ist natürlich BlendFactorAlpha.
Das BlendFactorAlpha bewirkt ja, dassFarbe = Arg1 * Alpha + Arg2 * (1 - Alpha)Ich finde aber kein ColorArgument2, mit dem das Licht berücksichtigt wird.
device.RenderState.TextureFactor = playerColor.ToArgb(); device.TextureState[0].AlphaOperation = TextureOperation.SelectArg1; device.TextureState[0].ColorOperation = TextureOperation.BlendFactorAlpha; device.TextureState[0].ColorArgument1 = TextureArgument.TFactor; device.TextureState[0].ColorArgument2 = TextureArgument.Specular; mesh.MeshData.Mesh.DrawSubset(iAttrib);Amsonsten würde es wunderbar funktionieren, dort, wo in der Textur alpha != 0 ist, wird die Spielerfarbe gerendert, nur ohne Licht und Schatten.
-
Ich glaube, ich muss doch eine normale Textur und eine zum Einfärben benutzen. Ich kann mich natürlich täuschen und würde in diesem Fall um Korrektur bitten, aber nach meinem Verständniss ist es so auch nicht möglich, so ein Dachmuster einzufärben, weil man das ja irgendwie mit dem darunterliegendem Muster kombinieren müsste, was nicht geht, wenn das Arg2 * 0 genommen wird (könnte auch erklären, dass ich kein passendes Arg2 finde
).
Zwei Texturen pro Objekt kann ich aber verkraften, nur nicht für jede Farbe eine. Danke trotzdem.EDIT: Ich brauch natürlich gar nicht zwei Texturen. Ich mache die eigentliche Textur überall alpha = 0, render aber ohne Alphablending und die einzufärbenden Stellen sind FFFFFFFF (oder auch nicht ganz weiß, siehe Dachmuster, aber alpha = FF) und werden dann nochmal mit farbigem Material gerendert. Das ist jetzt eine ausreichend gute Lösung.
-
Genau zu diesem Thema gibt es einen sehr guten Artikel in Game Programming Gems 4

-
fear

Naja, transparente oder halbtransparente Texturen sind wohl futsch, weil dieses Feature schon für das Einfärben drauf geht. Ich glaube aber nicht, dass das für mich jetzt ein Problem wird. Wahrscheinlich lasse ich es so, weniger als eine Textur geht eh nicht.
-
eine deiner nächsten fragen wird wohl sein, weshalb es so langsam läuft

*vorfreu*
rapso->greets()
-
Habe ich deine BlendFactorAlpha-Methode falsch verstanden, ich dachte ich hätte dort die Figur auch zweimal rendern müssen (so jedenfalls habe ich es gemacht). Oder meinst du, dass das RenderState-wechseln so langsam ist? In diesem Fall würde ich dann versuchen, erst alle Figuren ohne Farbe zu rendern und nur einmal wechseln und alle Farben rendern.
-
Die einzufärbenden Stellen sollten Graustufen sein. Dann bekommst du nach dem Einfärben (Multiplizieren) Farbverläufe in dem Farbton aber verschiedener Helligkeit. Ob die Graustufe durch Beleuvhtung oder aus der Textur kommt, dürfte kein groß3er Unterschied sein.
Bye, TGGC
-
Beim Panzer-Beispiel könnte man auch einfach eine Fahne oben aufs Dach kleben, die wie von TGGC vorgeschlagen eine Graustufen-Textur trägt. Diese kann man dann über Farbe oder Material-Eigenschaften einfach auf die Spieler-Farbe einfärben. In den meisten Fällen macht es sowieso keinen Sinn, das komplette Model einzufärben. Wer will denn mit nem Lila Panzer rumfahren ?

-
TGGC schrieb:
Die einzufärbenden Stellen sollten Graustufen sein. Dann bekommst du nach dem Einfärben (Multiplizieren) Farbverläufe in dem Farbton aber verschiedener Helligkeit. Ob die Graustufe durch Beleuvhtung oder aus der Textur kommt, dürfte kein groß3er Unterschied sein.
Genau das war meine Idee.
Ich mache das Einfärben jetzt mit der Ambient- und Diffuse-Eigenschaft vom Material und es sieht gut aus. So ein Dachmuster wie im Screenshot müsste man nur als Graubild zeichnen. Der einzige Nachteil der Methode ist, dass Transparenz oder Halbtransparenz bei den Texturen nicht mehr möglich ist, weil der Alpha-Kanal für die Spielerfarbe reserviert ist. Wird aber kein Problem sein.Cpp_Junky schrieb:
Wer will denn mit nem Lila Panzer rumfahren ?

Klar, das war ja auch die Problemstellung. Danke noch für eure Anteilnahme, aber es arbeitet bereits wie gewünscht.

-
Zeig mal nen Screenshot bitte

-
hier
(Spielerfarbe ist Blau)
-
Cool

Das erinnert mich an dein Strategiespiel, das ich vor ner Ewigkeit mal gespielt habe, nur in 3D. Hast du vor das Spiel nun in 3D zu machen?
-
Ja. Wird noch etwas dauern, da es noch ungelöste Probleme gibt (Markieren von Einheiten, Rahmen aufziehen) und noch für alle Einheiten Models erstellt werden müssen, wird aber irgendwann definitiv umgestellt.
Disclaimer: Ich bin dicht.