Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

1

07.03.2009, 15:37

Sprites


(Link)



Also ich hab folgendes Problem,

Dieses Sprite soll mit einer grünen Farbe überzogen werden, dabei soll aber der schwarze Rand nicht mitgerendert werden.

Wenn ich Alphablending aktiviere, ist zwar der schwarze Rand weg nur ist dann diese Wolke auch transparent.

Bisher verwende ich dazu folgenden Code:
gerendert wird mit DrawPrimitiveUP,
vertexformat = D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
g_pD3DDevice9->SetRenderState(D3DRS_ZENABLE,TRUE);
g_pD3DDevice9->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
g_pD3DDevice9->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
g_pD3DDevice9->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
g_pD3DDevice9->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_CURRENT);
g_pD3DDevice9->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE);
g_pD3DDevice9->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
g_pD3DDevice9->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_CURRENT);
g_pD3DDevice9->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_DISABLE);
g_pD3DDevice9->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);   
g_pD3DDevice9->SetRenderState(D3DRS_SRCBLEND, D3DRS_BLEND_SRCALPHA);
g_pD3DDevice9->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
g_pD3DDevice9->SetRenderState(D3DRS_LIGHTING,FALSE);
g_pD3DDevice9->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
g_pD3DDevice9->SetRenderState(D3DRS_COLORVERTEX,TRUE);
g_pD3DDevice9->SetRenderState(D3DRS_ALPHATESTENABLE,TRUE);
g_pD3DDevice9->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATER);
g_pD3DDevice9->SetRenderState(D3DRS_ALPHAREF,0);



Ziel ist:
der Schwarze Rand soll nicht gerendert werden
und ich möchte einstellen können,
zu wie viel Prozent diese Wolke transparent ist,
(dazu noch eine belibige Farbe über das gesammte Sprite.)

bei 0 Prozent, soll man halt nicht durchkucken können
bei 100 Prozent, soll man das Sprite nicht mehr sehen.

2

07.03.2009, 15:51

Re: Sprites

Zitat von »"trash52"«


Wenn ich Alphablending aktiviere, ist zwar der schwarze Rand weg nur ist dann diese Wolke auch transparent.

Ja, naja, ist doch klar.
Die Farbe gibt dann doch an, die sichtbar das Sprite sein soll. Schwarz=unsichtbar, weiß=sichtbar. Grau muss demnach halb sichtbar sein.
Du könntest natürlich einen Colorkey benutzen, das würde aber doof aussehen und du hättest harte Übergänge. Und das Sprite zeigt offensichtlich eine Wolke und die sind eben transparent.
Du könntest in einem Bildbearbeitunsprogramm die Farbkurve so verändern, dass sehr viel mehr weiß ist, dann wäre es weniger durchsichtig.
Lieber dumm fragen, als dumm bleiben!

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

3

07.03.2009, 16:12


(Link)



Ich hab jetzt Alphablending ausgestellt und nun sieht das so aus...


Also hat man da nur die Möglichkeit, dass es entweder blass aussieht oder man nimmt diesen Colorkey, wo das dann unsauber ausgefranzt aussieht.

Oder wie kann man das sonst noch hinbekommen?

In aktuellen Spielen sieht man jedenfalls keine ausgefranzten Sprites,

also muss das doch irgendwie gehen ...

4

07.03.2009, 16:22

Du kannst natürlich auch einen extra Alphakanal machen und dort dann die Mitte komplett weiß machen und nach außen halt schön weiche Ränder.
Lieber dumm fragen, als dumm bleiben!

trash52

Treue Seele

  • »trash52« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Dresden

  • Private Nachricht senden

5

07.03.2009, 17:35

Hey danke dir,

dein Ratschlag hat mich zu diesem Tutorial geleitet,

weil ich irgendwie an Multitexturing dachte.

http://www.codesampler.com/dx9src/dx9src_4.htm#dx9_multitexture


Im Prinzip war ich schon in der richtigen Richtung unterwegs,

nur ist mir später dann aufgefallen, dass die Textur schon einen transparenten Teil besitzen sollte, seit dem funktionierts.

LG Robert

Werbeanzeige