Frage

Ich habe einen Haken DirectX verwendet in C ++ Code, Text und Sprite zeichnet. Ich habe es getestet und es zog auch auf 2D-Anwendung. Allerdings, wenn ich es mit 3D-Anwendung (einige komplexe Spiel tatsächlich) versucht, nur Text sichtbar war. Von dass ich abgeleitet wird das Sprite von etwas zu sein overdrawn nicht anders, daher wäre der Text sein. I gesetzte Flags

    SetVertexShader(0);
    SetPixelShader(0);
    SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);

    //SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); 
    SetRenderState(D3DRS_ZENABLE, false);
    SetRenderState(D3DRS_LIGHTING, FALSE);
    SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

    SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
    SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
    SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
    SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
    SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);

Aus irgendeinem Grunde ALPHABLEND verursachte das Sprit überhaupt in jeder Anwendung sichtbar sein nicht, so dass ich es nicht aktiviert haben und es kommentiert werden.

Keinerlei ausfallsichere Art und Weise Sprites über D3D exist zu ziehen? Andernfalls sollte ich für sie verschiedene Flaggen / Werte verwenden?

Auch die z-index sollte ich für das Sprite in Fall festgelegt, es ist wirklich "unter" einigen anderen Sprites / Objekte?

(Ich bin nicht Autor nichts auf das Gerät gezogen, ich nur den süchtig DirectX-API habe und nicht einmal wissen, den Code Anwendung ziehen über I).

War es hilfreich?

Lösung

Zum einen ist der einfachste Weg Sprites zu einem D3D-Gerät zu machen ist ID3DXSprite.

Zweitens, ich glaube, es ist ein Tippfehler und Sie bedeuten COLOROP zu MODULATE zu setzen, nicht ALPHAOP.

Aber ich denke, in beiden Fällen nur mit einem unsichtbaren Ausgang enden würde, wenn Ihr Alpha von 0 Könnte es sein, dass die Textur Sie verwenden völlig transparent ist?

Auch vergessen Sie nicht alle wiederherzustellen machen Zustände Sie geändert haben (direkt oder indirekt), nachdem Sie mit Ihrem injiziert machen Code fertig sind. Ein einfacher Weg, dies zu tun ist, einen Zustandsblock zu erfassen und wenden Sie es, nachdem Sie mit Ihrem eigenen Rendering fertig sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top