游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1822|回复: 4

directx9 sdk开发求助

[复制链接]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2005-9-20 23:10:00 | 显示全部楼层 |阅读模式
本人用directx9 sdk写了一个程序来load 一个.x 文件,可是为什么材质总是显示不出来
程序主要部分如下;请高手指教
HRESULT CMyfirstView::InitD3d()//初始化D3D和device对象
{
        HWND hWnd=this->m_hWnd;
        if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION)))
                return E_FAIL;
        D3DDISPLAYMODE d3ddm;
        if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
                return  E_FAIL;
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp,sizeof(d3dpp));
        d3dpp.Windowed=true;
        d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat=d3ddm.Format;
        if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))
        {
                return E_FAIL;
        }


        return S_OK;
}


HRESULT CMyfirstView::InitGeom(char * name)//初始化几何体
{counter++;
        LPD3DXBUFFER pD3DXMtrlBuffer;
    if(FAILED(D3DXLoadMeshFromX(name,D3DXMESH_SYSTEMMEM,g_pd3dDevice,NULL,&pD3DXMtrlBuffer,NULL,&g_dwNumMaterials,&g_pMesh[counter-1])))return E_FAIL;
    D3DXMATERIAL*d3dxMaterials=(D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
           g_pMeshMaterials=new D3DMATERIAL9[g_dwNumMaterials];
g_pMeshTextures=new LPDIRECT3DTEXTURE9[g_dwNumMaterials];
    for(DWORD i=0;i<g_dwNumMaterials;i++)
        {
                g_pMeshMaterials=d3dxMaterials.MatD3D;
        g_pMeshMaterials.Ambient=g_pMeshMaterials.Diffuse;
       g_pMeshTextures=NULL;
       
        if(d3dxMaterials.pTextureFilename!=NULL&&lstrlen(d3dxMaterials.pTextureFilename)>0)
                {
              if(FAILED(D3DXCreateTextureFromFile(g_pd3dDevice,d3dxMaterials.pTextureFilename,&g_pMeshTextures)))
                  {counter--;
                          return E_FAIL;         
                  }

                }
        }

pD3DXMtrlBuffer->Release();
return S_OK;

}

void CMyfirstView::OnLoad1() //load tiger.x文件,
{if(FAILED(InitGeom("TIGER.x")))return;
SendMessage(WM_PAINT,0,0);


void CMyfirstView::OnDraw(CDC* pDC)//绘制几何体
{
        CMyfirstDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        // TODO: add draw code for native data here
        if(NULL==g_pd3dDevice)
                return;
//        g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);
        g_pd3dDevice->BeginScene();
        for(DWORD i=0;i<g_dwNumMaterials;i++)
        {
                g_pd3dDevice->SetMaterial(&g_pMeshMaterials);
          if(FAILED(g_pd3dDevice->SetTexture(0,g_pMeshTextures)))
                  return ;
          for(int j=0;j<counter;j++)
                  g_pMesh[j]->DrawSubset(i);
        }
g_pd3dDevice->EndScene();
g_pd3dDevice-&gtresent(NULL,NULL,NULL,NULL);
       
}

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-9-22 10:35:00 | 显示全部楼层

Re:directx9 sdk开发求助

if(FAILED(D3DXCreateTextureFromFile(g_pd3dDevice,d3dxMaterials.pTextureFilename,&g_pMeshTextures)))

//把材质文件名打印看看,看看目录是否有问题

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2005-9-22 22:42:00 | 显示全部楼层

Re:directx9 sdk开发求助

if(FAILED(D3DXCreateTextureFromFile(g_pd3dDevice,d3dxMaterials.pTextureFilename,&g_pMeshTextures)))
上面着句话执行是成功的,(我设置了断点)

11

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2005-9-23 13:05:00 | 显示全部楼层

Re:directx9 sdk开发求助

g_pMeshTextures=NULL;你的顺序也错了,你都付给NULL了,怎么会有呢?
你要先if(FAILED(D3DXCreateTextureFromFile(g_pd3dDevice,d3dxMaterials.pTextureFilename,&g_pMeshTextures)))
再付给你的几何体,这是很简单的,具体我记不得我的代码了,还有可能你的几何体中没有灯光材质看不见,需要手工在程序中写!

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2005-9-26 23:29:00 | 显示全部楼层

Re:directx9 sdk开发求助

在场景中LOAD一个物体(*.X文件)之后,在load 另外一个物体(*.x文件),如何才能不覆盖第一个物体
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-27 23:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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