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

Osram

Alter Hase

  • »Osram« ist der Autor dieses Themas

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

1

30.08.2007, 19:55

Problem mit DXT1 1 Bit Alpha in D3D (gelöst)

Die 1bit alfa plane von DXT1 Texturen in D3D funktioniert in meinem Spiel nicht.

Ich habe mit GIMP eine DXT1 Textur mit 1 Bit Alpha gemacht. Auflösung ist 2kx2k. Wenn ich sie per GIMP oder DDSView wieder lade, sehe ich die "Löcher" die ich geschnitten habe, d.h. die Textur ist ok.
Ich lade die Textur im Spiel per D3DXCreateTextureFromFile. Der Rückgabewert ist ok und wenn ich getDesc mache, sehe ich, dass die Textur im Speicher auch als D3DFMT_DXT1 vorliegt.

Ich habe durchdebugged und gesehen dass, korrekterweise, der folgende Code aufgerufen und durchlaufen wird:


C-/C++-Quelltext

1
2
3
4
5
6
if(TEX_INFO_IS_INIT_TEX_IS_1BIT_ALPHA(pTheMesh->iMapNumber))
    {
        CHECK_HR(pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE));
        CHECK_HR(pd3dDevice->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000080));  //(DWORD)0x00000001);    // 0x08);

        CHECK_HR(pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL));
    }


bevor DrawIndexedPrimitives aufgerufen wird. Beim Debuggen hatte ich die D3D Runtime auf "debug" gestellt und die Zahl der ausgegebenen Warnungen auf Maximum und es kommt keine einzige die etwas mit meinem Problem zu tun hat. Im Spiel sind alle Stellen, die durchsichtig sein sollten, Opaque schwarz.

Ich habe eine GeForce go 6800 und z.B. D3DCMP_GREATEREQUAL ist laut DeviceCaps erlaubt.

Ich suche sowohl Ideen was falsch sein könnte als auch wie ich den Fehler weiter einkreisen könnte.
"Games are algorithmic entertainment."

2

16.09.2007, 22:44

Problem mittlerweile gelöst?
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

17.09.2007, 08:13

Du musst Direct3D noch sagen, dass der Alphakanal aus der Textur überhaupt benutzt werden soll.
So wird der Alphakanal mit dem Alphawert der Vertexfarbe multipliziert:

C-/C++-Quelltext

1
2
3
p_d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
p_d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
p_d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);


Wenn nur die Textur benutzt werden soll:

C-/C++-Quelltext

1
2
p_d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELEGTARG1);
p_d3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);

Osram

Alter Hase

  • »Osram« ist der Autor dieses Themas

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

4

22.09.2007, 18:59

Ja, danke, genau das war es auch :oops: :oops:
"Games are algorithmic entertainment."

Werbeanzeige