游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1322|回复: 2

D3DXCreateTextureFromFileEx()求助

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-11-18 18:27:00 | 显示全部楼层 |阅读模式
问题: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-&gtresent(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;
}

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2006-11-18 21:49:00 | 显示全部楼层

Re:D3DXCreateTextureFromFileEx()求助

你启用ALPHA混合还少了两句设置渲染状态的语句。至于少了什么,自己查查DX SDK文档吧。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-11-20 12:26:00 | 显示全部楼层

Re:D3DXCreateTextureFromFileEx()求助

pD3DDevice ->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
改成
pD3DDevice ->SetRenderState(D3DRS_ALPHATESTENABLE,TRUE);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 22:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表