2013-11-20 33 views
0

編輯:解決C++的DirectX 9.0的Sprite Alpha混合不顯示

使用我需要alphablending)Sprite-端Sprite-以外>開始(和>的繪製狀態的功能的問題是我()的碼塊。

我在DirectX 9.0中創建了我自己的2D引擎。我正在使用相應的spritesheet繪製它們。現在的問題是,如果我將混合設置爲D3DSPR_SORT_TEXTURE,我將能夠看到沒有任何問題的紋理(包括變換矩陣),但是如果我嘗試將其設置爲D3DSPR_ALPHABLEND,則不會顯示該精靈。我嘗試了幾件事。 SetRenderState,將圖像格式從.png更改爲.tga,爲黑色背景圖像添加Alpha通道,使用2D混合示例中使用的另一圖像,更改我的D3DManager的D3DFMT_參數等。

我試圖在這裏尋找答案,但沒有找到任何與我的問題有關的答案。

這是我的一些代碼,可能是重要的;

D3DManager.cpp

parameters.BackBufferWidth = w;   //Change Direct3D renderer size 
parameters.BackBufferHeight = h; 

parameters.BackBufferFormat = D3DFMT_UNKNOWN; //Colors 

parameters.BackBufferCount = 1;     //The amount of buffers to use 
parameters.MultiSampleType = D3DMULTISAMPLE_NONE;  //Anti-aliasing quality 
parameters.MultiSampleQuality = 0; 

parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;  

parameters.hDeviceWindow = window;     //The window to tie the buffer to 
parameters.Windowed = true;       //Window mode, true or false 

parameters.EnableAutoDepthStencil = NULL; 

parameters.Flags = NULL;       //Advanced flags 
parameters.FullScreen_RefreshRateInHz = 0;   //Fullscreen refresh rate, leave at 0 for auto and no risk 

parameters.PresentationInterval = D3DPRESENT_INTERVAL_ONE; //How often to redraw 

Sprite.cpp

void Sprite::draw(){ 
     D3DXVECTOR2 center2D = D3DXVECTOR2(center.x,center.y); 
     D3DXMatrixTransformation2D(&matrix,&center2D,NULL,&scale,&center2D,angle,new  D3DXVECTOR2(position.x,position.y)); 
sprite->SetTransform(&matrix); 
sprite->Begin(D3DXSPRITE_ALPHABLEND); 
if(!extended){ 
    sprite->Draw(texture, NULL, NULL, &position, 0xFFFFFF); 
} 
else{ 
    doAnimation(); 
    sprite->Draw(texture, &src, &center, new D3DXVECTOR3(0,0,0), color); 
} 
sprite->End(); 
    } 

Main.cpp的

//Clear the scene for drawing 
    void renderScene(){ 
d3dManager->getDevice().Clear(0,NULL,D3DCLEAR_TARGET,0x161616,1.0f,0); //Clear entire backbuffer 

d3dManager->getDevice().BeginScene(); //Prepare scene for drawing 
render();        //Render everything 
d3dManager->getDevice().EndScene(); //Close off 

d3dManager->getDevice().Present(NULL, NULL, NULL, NULL); //Present everything on-screen 
    } 

    //Render everything 
    void render(){ 
     snake->draw(); 
    } 

我有沒有線索在所有。任何幫助,將不勝感激。

+0

只是一個快速猜測:你可以添加到你的顏色完整的alpha(0xFFFFFFFF),同時呈現精靈?也許它與你的紋理相乘,並且完全透明。 – Gnietschow

+0

哦,我忘了發佈thiS解決了。我必須將RenderState設置放在Sprite-> Begin()和Sprite-> End()之間,現在一切正在進行。 – user3001604

+0

@ user3001604請不要將「已解決」添加到您的問題標題中。如果您找到了您自己的解決方案,請點擊左邊的複選標記,將其作爲答案發布並[接受它](http://meta.stackexchange.com/a/5235/220538)。 –

回答

0

問題是我採用我需要alphablending的
Sprite->Begin()Sprite->End()
碼塊之外的繪製狀態的功能。