編輯:解決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,¢er2D,NULL,&scale,¢er2D,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, ¢er, 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();
}
我有沒有線索在所有。任何幫助,將不勝感激。
只是一個快速猜測:你可以添加到你的顏色完整的alpha(0xFFFFFFFF),同時呈現精靈?也許它與你的紋理相乘,並且完全透明。 – Gnietschow
哦,我忘了發佈thiS解決了。我必須將RenderState設置放在Sprite-> Begin()和Sprite-> End()之間,現在一切正在進行。 – user3001604
@ user3001604請不要將「已解決」添加到您的問題標題中。如果您找到了您自己的解決方案,請點擊左邊的複選標記,將其作爲答案發布並[接受它](http://meta.stackexchange.com/a/5235/220538)。 –