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

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

1

11.11.2007, 16:19

Alphablending mit DX9

Hallo

Ich habe eine Pyramide mit ganz einfachen Vertexdaten. Nun möchte ich dies e mit Alphalbending irgendwie transparent machen.
Nun in der DX-Doku steht nicht viel, ausser das man ein paar Renderstates setzen muss.
Diese habe ich jetzt gesetzt.

C-/C++-Quelltext

1
2
3
4
5
    pDevice->SetRenderState (D3DRS_ZENABLE,false);
    pDevice->SetRenderState (D3DRS_ALPHABLENDENABLE,TRUE);
    pDevice->SetRenderState (D3DRS_SRCBLENDALPHA,D3DBLEND_SRCALPHA);
    pDevice->SetRenderState (D3DRS_DESTBLENDALPHA,D3DBLEND_INVSRCALPHA);
    pDevice->SetRenderState (D3DRS_BLENDOP, D3DBLENDOP_ADD);



Und so sieht das füllen der Vertices aus.

C-/C++-Quelltext

1
2
3
        atriangle[0].dwColor    = D3DCOLOR_RGBA (200,255,255,200);
        atriangle[1].dwColor    = D3DCOLOR_RGBA (200,255,255,200);
        atriangle[2].dwColor    = D3DCOLOR_RGBA (200,255,255,100);


Ich benutze das Format: "D3DFMT_X8R8G8B8".


Nun, die Pyramide erscheint zwar in bunten Farben, aber ich sehe keine Transparenz.
Wisst ihr an was, dass es liegen könnte, oder kennt ihr einen typischen Anfängerfehler, den man in Verbindung mit Alphablending macht?
Oder einfach etwas,auf was man undebingt achten muss?

2

11.11.2007, 17:07

Probier mal diese Variante:

pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);

Ansonsten hilft dir vielleicht das
https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?p=91482

Oder die Forensuche: Alphablending
fka tm

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

11.11.2007, 17:17

Danke,aber das habe ich bereits ausprobiert. (und jetzt nocheinmal) und es geht immer noch nicht. :(

Forensuche habe ich durch, auch google, aber ich finde für meinen Fall ohne Texturen nichts.

Das führt mich zu der Frage ist es übhaupt möglich ohne Texturen einen Alphawert zu bestimmen?
Mir fällt ein,dass ich das noch nirgends gesehen habe.....

Hmm, ich gebs glaube ich sofern von euch keine Vorschläge meh kommen sowieso langsam auf. Und mache es mit Texturen.. DAS sollte ja gehen, wie ich zur Genüge gesehen habe.

4

11.11.2007, 17:35

Geht auch ohne Texturen, mit dem Diffuse-Wert...
Kannst du irgendwo den gesamten Code posten?
Wenn nicht, schick ihn mir per PN zu, dann schau ich mal drüber...
fka tm

5

11.11.2007, 17:39

Man muss noch folgendes einstellen : (mit einer Textur)

C-/C++-Quelltext

1
2
3
4
// Direct3D soll den Alphakanal der Texturen und den Alphawert der Streufarbe verwenden.

    pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP,    D3DTOP_MODULATE);
    pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1,  D3DTA_CURRENT);
    pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2,  D3DTA_TEXTURE);


oder ohne Textur :

C-/C++-Quelltext

1
2
3
4
// Direct3D soll den Alphawert der Streufarbe verwenden.

    pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP,    D3DTOP_SELECTARG1;
    pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1,  D3DTA_CURRENT);
    pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2,  D3DTA_TEXTURE);


Dann müsste es eigentlich funktionieren :)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

11.11.2007, 18:06

Hmm. Geht nicht.

Also dass ihr mich richtig versteht. Ich will druch diese Pyramide durchschauen können. Und sozusagen die andere Seite der Pyramide "sehen".
Also müsste ja diese Farbe einen Einfluss auf die Seite haben, die mir gerade zugewendet ist.
Also alles, was hinter der Pyramide ist solte ich irgendwei "sehen", also sich bemerkbar machen.

Ich bin schon den ganzen Nachmittag dran, und verlier langsam den Durchblick....

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

11.11.2007, 18:15

das problem hatte auch trikkiemikkie bzw hat er noch. das zauberowrt heisst eigl alphatesting. probier das ma.

https://www.spieleprogrammierer.de/phpBB…8562&highlight=

8

11.11.2007, 18:42

Den Link hatte ich zwar schon gepostet @Tromml, aber macht ja nix...

Licht, ZBuffer aus? Cullmode None ?
Dreieck zum Schluss gerendert?

Wir können nur raten, wenn du mit dem Rest vom Code nicht rüberkommst...
fka tm

9

11.11.2007, 18:48

Es sollte auch ohne Alphatesting gehen.

C-/C++-Quelltext

1
2
3
4
5
6
pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
pDevice->SetRenderState (D3DRS_ZENABLE, TRUE); 
pDevice->SetRenderState (D3DRS_ZWRITEENABLE, FALSE); 

// Zeichnen

pModel->DrawSubset(0);



:?: Code waere nicht schlecht :!:

Edit : vll. so:

C-/C++-Quelltext

1
2
3
4
pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
pModel->DrawSubset(0);
pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
pModel->DrawSubset(0);

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

11.11.2007, 18:55

@Trikkiemikkie: sry, wenn man net lesen kann :oops:

Werbeanzeige