Colorkey mit alpahblending(neu formuliert)



  • Also gut:irgendwie muss ich meine frage nicch tso ganz attraktiv dergestellt haben. also ich versuche es mal so:

    ich möchte eigentlich nur einen collorkey haben mit dem ich pixel einer bestimmten farbe nicht anzeige.
    Ich stelle ein Bild dar und möchte alles was weiss ist transparent haben.

    Funktioniert das im X8R8G8B8 Format??

    eigentlich erstelle ich eine Textur mit der D3DXCreateTextureFromResourceEx methode und gebe als colorkey die farbe D3DCOLOR_XRGB(255,255,255) an.

    wenn ich hier den Colorkey setzte dann macht er mir die Pixel nicht hin ich habe aber einen schwarzen Rand um meine Textur.also nicht viel gewonnen.

    dann habe ich gelesen das man mit Alphatest Pixel bei der Darstellung ignorieren kann.
    !!!Genau das was ich will!!!
    klappt aber nicht!!!

    if(caps.AlphaCmpCaps & D3DPCMPCAPS_GREATER)
    {
    pDevice->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATER);
    pDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
    pDevice->SetRenderState(D3DRS_ALPHAREF,0x00000000);
    }

    Weiterhin setzte ich folgende Renderstates:

    pDevice->SetRenderState(D3DRS_ZENABLE,FALSE);
    pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
    pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
    pDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);

    naja irgendwie läuft das nicht so wie ich mir das vorgestellt habe. (überhaupt nicht!!!)

    so nun ein paar konkrete Fragen:

    1: Ich vergleich ja hier (D3DRS_ALPHAREF,0x00000000) mit einem bestimmten Alphawert. Wie und wo sage ich ihm(dem Computer) denn das die Farbe WEiss nun den Alphawert 00 hat.

    2. holt er sich die Alphawete aus der Textur d.h. muss ich beim Zeichnen des bildes schon den einzelnen Pixeln einen Alphawert zuweisen??(Scheint mir recht mühsam!!!

    3. muss ich D3DRS_SRCBLEND, und Destblend überhaupt setztn wenn er doch nur die pixel ignorieren soll???

    irgendwie scheint es mir das ich ein grosses "undurchsichtiges" BRETT vor dem kopf habe.

    Wäre toll wenn mir jemand mal so grob erklären könnte was ich nich tgemacht habe und was alles zu beachten ist

    danke muli



  • Na gut....
    ungefär so kann man einen Colorkey simulieren

    muss gesetzt werden

    pDevice->SetRenderState(D3DRS_ZENABLE,FALSE);
    pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
    pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
    pDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);

    beim laden des Bildes nuss man ein format mit Alphakanal wählen

    für die wahl des Colorkeys soll man den alphawert 255 setzten wenn das Bild keinen alphakanal enthält: bei mir klappt es aber auch mit allen anderen Werten ??

    Warum?

    es wäre schön wenn sich jemand dieser Frage annehmen könnte.

    muli


Anmelden zum Antworten