游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1207|回复: 0

d3d初学者的两个问题,谢谢拉~

[复制链接]

14

主题

61

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2005-9-19 19:59:00 | 显示全部楼层 |阅读模式
前两天郁闷的抛弃了DDRAW转投D3D后,遇到了两个小问题:

1  恢复设备时ID3DXSPRITE对象和纹理还要重新创建么?我恢复设备后,发现上面两种对象的指针都非空,但无法引用,这样要重新创建他们之前要先release么?

2  我用ID3DXSPRITE的DRAW出来的图象不完整而且变形(图见附件,Ascent是原图,back是运行时我截的图),怎么回事?下面事我的代码,恢复设备的部分我省略了。d3dpp、d3ddm、pDev、spr、tex都是全局变量

BOOL D3DDisplay::InitGraph() {
        if(NULL == (pD3D = Direct3DCreate8(D3D_SDK_VERSION)))return FALSE;
        if(FAILED(pD3D -> GetAdapterDisplayModeD3DADAPTER_DEFAULT,&d3ddm)))
                return FALSE;
        ZeroMemory(&d3dpp, sizeof(d3dpp));
#if defined(_Windowed)
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;         d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
#endif
#if defined(_FullScreen)
        d3dpp.Windowed=FALSE;
        d3dpp.hDeviceWindow=*hWnd;         d3dpp.SwapEffect=D3DSWAPEFFECT_FLIP;
        d3dpp.BackBufferCount=2;
        d3dpp.BackBufferWidth=1024;
        d3dpp.BackBufferHeight=768;
        d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
        d3dpp.FullScreen_PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
#endif
        d3dpp.BackBufferFormat=d3ddm.Format;
        d3dpp.EnableAutoDepthStencil=TRUE;
        d3dpp.AutoDepthStencilFormat=D3DFMT_D16;
        if(FAILED(pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
                *hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                &d3dpp, &pDev ) ) )
        return FALSE;
        Setup2DCamera();
        D3DXCreateTextureFromFileEx(pDev,BitmapFileName , D3DX_DEFAULT,
                D3DX_DEFAULT,D3DX_DEFAULT,0, D3DFMT_UNKNOWN,
                D3DPOOL_MANAGED,        D3DX_DEFAULT,D3DX_DEFAULT,
                0, NULL, NULL,&tex);
        D3DXCreateSprite(pDev,&spr);
        return TRUE;
}
void D3DDisplay::Render()
{
    if(pDev == NULL||spr==NULL||tex==NULL)return;
    pDev->Clear0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
               D3DCOLOR_XRGB(0,0,0),1.0f,0);
    pDev->BeginScene();
    spr->Draw(tex,NULL, NULL, NULL, 0, &D3DXVECTOR2(0,0), 0xFFFFFFFF);
    pDev->EndScene();
    pDev-&gtresent(NULL,NULL,NULL,NULL);//恢复设备的部分我省略了
}
void D3DDisplay::Setup2DCamera()
{
    D3DXMATRIX matOrtho;
    D3DXMATRIX matIdentity;
    D3DXMatrixOrthoLH(&matOrtho, (float)m_nScreenWidth, (float)m_nScreenHeight,
                      0.0f, 1.0f);
    D3DXMatrixIdentity(&matIdentity);
    pDev->SetTransform(D3DTS_PROJECTION, &matOrtho);
    pDev->SetTransform(D3DTS_WORLD, &matIdentity);
    pDev->SetTransform(D3DTS_VIEW, &matIdentity);
    pDev->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
    pDev->SetRenderState(D3DRS_LIGHTING, FALSE);
}

sf_2005919195929.zip

110.28 KB, 下载次数:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 02:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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