Entwickler-Ecke
Multimedia / Grafik - DirectX. TextureBlending
GuaAck - Sa 15.06.19 23:06
Titel: DirectX. TextureBlending
Hallo,
vielleicht gibt es ja einen Experten, der mir hier helfen kann:
Ich habe Erfahrung mit DirectX, aber nur zur z. B. animierten Darstellung von statistischen Daten; da habe ich nie Texturen gebraucht.
Jetzt habe ich ein Spiel programmiert, bei dem Holz-Spielsteine angeordnet und gestapelt sind. (Ähnlich wie Kyodai, wer das kennt.)
Jetzt zu meinem konkreten Problem: Ein Spielstein hat ein Bild auf der Oberseite. Wenn z. B. rechts von dem Spielstein ein höherer Stapel von Steinen liegt, dann soll ein entsprechemder Schatten auf dem Bild dargestellt werden.
Meine aktuelle Lösung: Ich erzeuge mit einem anderen Programm die Bilder für alle (z. Z. 12) vorkommenden Schattierungen als eigene Bitmaps, die ich dann als Resource in mein Programm einbinde. Im Programm ermittele ich den Verschattungszustand und setze dann die entsprechende Textur. Funktioniert nicht schlecht.
Nachteil 1: Es gibt Schattensituationen, die in meinen 12 Versionen nicht enthalten sind; in der nächsten Version werden es mehr sein.
Nachteil 2: Ich möchta das Thema der Bilder auf den Steinen (Blumen, Häuser, Autos,...) zur Laufzeit ändern. Ich müsste mit meinem Verfahren für jedes neue Thema die Bilder mit allen vorhommenden Schattierungen erzeugen.
Das ist alles machbar,aber vielleicht geht es ja mit Blending besser. Texture0=Bild, Texture1=Schatten. In meinen Gehversuchen "blended" es, aber nie so, wie ich es beschrieben habe. Ich möchte ja nur die beiden Testuren mischen , z.B. per D3DTOP_MODULATE.
Kennt jemand ein gutes Buch zu diesem Bereich, evt. auch ein Tutorial oder hat ein parr Zeilen Code griffbereit, die mir helfen könnten?
Viele Grüße
GuaAck
Chiyoko - Di 18.06.19 13:24
Welche Direkt X Version bzw. welches SDK verwendest du?
GuaAck - Di 18.06.19 23:43
Hallo Chiyoko,
DirectX8.
Ich nutze die Headers von Microsoft, die jemand mit viel Arbeit von C/C++ in Pascal übersetzt hat. Geht bestens, die Beschreibung von Microsoft passt zuverlässig.
Da ich nur die elemtaren Funktionen von DirectX nutze, lohnt ein Übergang auf eine höhere Version nicht, zumal ich dafür erst ein Pascal-Interface finden müsste.
Danke für Dein Interesse und Deine Hilfsbereitschaft,
Gruß GuaAck
GuaAck - Mi 19.06.19 17:21
Hallo Chiyoko,
vielen Dank für die Hinweise. Die Microsoft-Beipeile sehen hilfreich aus, wenngleich auch relativ umfangreich, aber die probiere ich mals aus. Das Spieleprogrammierbuch habe ich bestellt.
Viele Grüße
GuaAck
GuaAck - Mo 24.06.19 22:16
Hallo,
falls jemand im Forum nach einer Lösung sucht, hier die Lösung: In der Microsoft-Dokumentation zu DirectX8 (die ich ausgezeichnet finde!) ist das Blending übersichtlich beschrieben. Es fehlt eine Kleinigkeit: Für jede Stage muss die Koordinatentransformation mit dem Parameter D3DTSS_TEXCOORDINDEX gesetzt sein. An anderer Stelle in der Dokumentation ist das bestens beschrieben, man muss eben wissen nach was man sucht.
Genau das wusste ich nicht.
Unten mein Code,
Gruß
GuaAck
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| texture := TexSchatten; d3ddevice.SetTexture(0, TextBild); IF texture <> NIL THEN BEGIN d3ddevice.SetTexture(1, texture); d3ddevice.SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); d3ddevice.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); d3ddevice.SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0); d3ddevice.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_Modulate); d3ddevice.SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_CURRENT); d3ddevice.SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_TEXTURE); d3ddevice.SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE); END ELSE d3ddevice.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); d3ddevice.DrawIndexedprimitive(Primitive, StartVertexD, AnzVerticesD, StartIndexD, PrimitiveCountD); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!