|
|
问题:D3DXCreateTextureFromFileEx()去掉图片背景色255,255,0,255,为什么去掉的部分成黑色了。帮帮忙,问题出在哪。
代码如下:
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment (lib,"d3d9.lib")
#pragma comment (lib,"d3dx9.lib")
#define D3DFVF_CUSTOM D3DFVF_XYZRHW|D3DFVF_TEX1
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pD3DDevice = NULL;
LPDIRECT3DTEXTURE9 g_pTex =NULL;
HWND hWnd_app=NULL;
HINSTANCE hInstance_app=NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVB;
struct VERTEXBUFFER
{
float x,y,z,rhw;
float u,v;
};
VERTEXBUFFER versices[4]=
{
{400.0f,100.0f,0.5f,1.0f,0.0f,0.0f},
{700.0f,100.0f,0.5f,1.0f,1.0f,0.0f},
{400.0f,400.0f,0.5f,1.0f,0.0f,1.0f},
{700.0f,400.0f,0.5f,1.0f,1.0f,1.0f}
};
void InitVB()
{
g_pD3DDevice->CreateVertexBuffer(4*sizeof(VERTEXBUFFER),D3DUSAGE_WRITEONLY,D3DFVF_CUSTOM,D3DPOOL_MANAGED,&g_pVB,NULL);
void *gVB;
g_pVB ->Lock(0,sizeof(versices),(void**)&gVB,0);
memcpy(gVB,versices,sizeof(versices));
g_pVB ->Unlock();
}
void GameInit()
{
g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DDISPLAYMODE d3ddm;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3ddm,sizeof(d3ddm));
ZeroMemory(&d3dpp,sizeof(d3dpp));
g_pD3D ->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &d3ddm);
d3dpp.Windowed=TRUE;
d3dpp.BackBufferFormat=d3ddm.Format;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd_app,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pD3DDevice);
D3DXCreateTextureFromFileEx(g_pD3DDevice,"123.bmp",D3DX_DEFAULT , D3DX_DEFAULT,
D3DX_DEFAULT , 0 , D3DFMT_A8R8G8B8 , D3DPOOL_MANAGED,
D3DX_DEFAULT , D3DX_DEFAULT , D3DCOLOR_ARGB(255,255,0,255),NULL , NULL ,
&g_pTex);
InitVB();
}
void GameMain()
{
g_pD3DDevice ->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
g_pD3DDevice ->SetRenderState(D3DRS_ALPHAREF,0x00000001);
g_pD3DDevice ->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATER);
g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,0),1.0f,0);
g_pD3DDevice->BeginScene();
g_pD3DDevice->SetStreamSource(0,g_pVB,0,sizeof(VERTEXBUFFER));
g_pD3DDevice->SetFVF(D3DFVF_CUSTOM );
g_pD3DDevice->SetTexture(0,g_pTex);
g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
g_pD3DDevice->EndScene();
g_pD3DDevice-> resent(NULL,NULL,NULL,NULL);
}
void GameRelease()
{
if(g_pD3DDevice)
{
g_pD3DDevice->Release();
g_pD3DDevice=NULL;
}
if(g_pD3D)
{
g_pD3D->Release();
g_pD3D=NULL;
}
}
LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}break;
default :break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wc;
wc.style =CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wc.hCursor =LoadCursor(NULL,IDC_ARROW);
wc.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance =hInstance;
wc.lpfnWndProc =WinProc;
wc.lpszClassName="12321";
wc.lpszMenuName= NULL;
RegisterClass(&wc);
MSG msg;
ZeroMemory(&msg,sizeof(&msg));
HWND hWnd;
hWnd=CreateWindow("12321","郁闷啊",WS_SYSMENU |WS_VISIBLE,0,0,800,600,NULL,NULL,hInstance,NULL);
hWnd_app=hWnd;
hInstance_app=hInstance;
GameInit();
while(msg.message!=WM_QUIT)
{
if(PeekMessage (&msg,NULL,0, 0, PM_REMOVE))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
else
{
GameMain();
}
}
GameRelease();
UnregisterClass("12321",hInstance);
return (int)msg.wParam;
} |
|