游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4590|回复: 12

求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....都

[复制链接]

7

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2006-12-5 23:49:00 | 显示全部楼层 |阅读模式

bool DoInit()
{
        D3DDISPLAYMODE d3ddm;
        D3DPRESENT_PARAMETERS d3dpp;
        ID3DXBuffer *pD3DXMaterials;

        DWORD dwNumMaterials;
        D3DXMATERIAL *pMaterials=NULL;
        D3DMATERIAL9 *pMaterialList=NULL;
        IDirect3DTexture9 *pTextureList=NULL;
       
        g_pD3D=Direct3DCreate9(D3D_SDK_VERSION);

        //获得Direct3D接口
        if(g_pD3D==NULL)
        {
                MessageBox(NULL,"error","D3D_CREATE",MB_OK);
                return false;
        }

        //选择显示模式
        if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
        {
                MessageBox(NULL,"error","GET_DISPLAY_MODE",MB_OK);
                return false;
        }


        //设置显示方式
        ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));//清空结构体
        d3dpp.Windowed=true;
        d3dpp.SwapEffect=D3DSWAPEFFECT_FLIP;
        d3dpp.BackBufferFormat=d3ddm.Format;
        d3dpp.BackBufferWidth=Window_Width;
        d3dpp.BackBufferHeight=Window_Height;

        //创建设备接口并初始化设备接口
        if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,g_hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pD3DDevice)))
        {
                MessageBox(NULL,"error","D3DDevice",MB_OK);
                return false;
        }

        //加载网格模型
        if(FAILED(D3DXLoadMeshFromX("Warrior.x",D3DXMESH_SYSTEMMEM,g_pD3DDevice,NULL,&pD3DXMaterials,NULL,&dwNumMaterials,&g_pD3DXMesh)))
        {
                MessageBox(NULL,"error","LoadMesh",MB_OK);
                return false;
        }

        //查询材质和纹理映射的信息
        pMaterials=(D3DXMATERIAL*)pD3DXMaterials->GetBufferPointer();
        if(pMaterials!=NULL)
        {
                //分配一些材质去拷贝数据
                pMaterialList=new D3DMATERIAL9[dwNumMaterials];

                //分配一些纹理对象指针的数组
                pTextureList=new IDirect3DTexture9[dwNumMaterials];

                //拷贝所有的材质
                for(DWORD i=0;i<dwNumMaterials;i++)
                {
                        pMaterialList=pMaterials.MatD3D;

                        //将环境色与漫反射色设置一样
                        pMaterialList.Ambient=pMaterialList.Diffuse;

                        //创建并加载纹理
                        if(FAILED(D3DXCreateTextureFromFileA(g_pD3DDevice,pMaterials.pTextureFilename,&pTextureList)))
                        {
                                MessageBox(NULL,"error","load Texture",MB_OK);
                                return false;
                        }

                        //释放用于加载材质的缓冲区
                        pD3DXMaterials->Release();
                }
        }
        else
        {
                //如果没有材质被加载的话,创建一个默认的材质
                dwNumMaterials=1;
               
                //创建一个白色的材质
                pMaterialList=new D3DMATERIAL9[1];
                pMaterialList[0].Diffuse.r=1.0f;
                pMaterialList[0].Diffuse.g=1.0f;
                pMaterialList[0].Diffuse.b=1.0f;
                pMaterialList[0].Diffuse.a=1.0f;

                //创建一个空的纹理引用
                pTextureList=new IDirect3DTexture9[1];
                pTextureList[0]=NULL;
        }



        return 1;
}


此楼是初始化的函数
具体问题是pTextureList=new IDirect3DTexture9[1]报错

////////////////////////////////////////////////////////////////////////////////
c:\program files\microsoft directx sdk (april 2006)\include\d3d9.h(1116) : see declaration of 'IDirect3DTexture9::AddDirtyRect'
c:\documents and settings\administrator\my documents\visual studio 2005\projects\directx_dotx\directx_dotx\main.cpp(181) : error C2664: 'D3DXCreateTextureFromFileA' : cannot convert parameter 3 from 'IDirect3DTexture9 *__w64 ' to 'LPDIRECT3DTEXTURE9 *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
c:\documents and settings\administrator\my documents\visual studio 2005\projects\directx_dotx\directx_dotx\main.cpp(205) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
        c:\program files\microsoft directx sdk (april 2006)\include\d3d9.h(1132): could be 'IDirect3DTexture9 &IDirect3DTexture9:perator =(const IDirect3DTexture9 &)'
        while trying to match the argument list '(IDirect3DTexture9, int)'
/*******************************************************************
pTextureList不能new,但是pMaterialList却可以new,明明是一样的东西啊.......
完全的代码在附件里面,请一定要帮帮我这个菜鸟啊..........

sf_2006125234832.rar

174.4 KB, 下载次数:

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-12-5 23:58:00 | 显示全部楼层

Re:求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....

去掉:pTextureList=new IDirect3DTexture9[dwNumMaterials];
修改:if(FAILED(D3DXCreateTextureFromFileA(g_pD3DDevice,pMaterials.pTextureFilename,&pTextureList)))
。。。。

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-12-6 00:04:00 | 显示全部楼层

Re:求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....

若想加载多个纹理,要定义为指针数组,既:IDirect3DTexture9 **pTextureList=NULL;
然后可以分配:pTextureList=new IDirect3DTexture9 *[纹理个数];
然后加载纹理时,参数才是,&pTextureList

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-12-6 00:05:00 | 显示全部楼层

Re:求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....

恩,楼上说的很有道理啊。

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-12-6 00:06:00 | 显示全部楼层

Re:求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....

睡觉!

7

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
 楼主| 发表于 2006-12-6 00:28:00 | 显示全部楼层

Re: 求助关于 .x文件加载方面的问题,请前辈们帮帮我啊....

谢谢大侠了.......
已经解决了模型的加载问题,但貌似纹理不对,明天还要上课,现在还是睡觉的好,以后再研究....谢谢大侠
sf_200612602810.jpg

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-12-6 09:35:00 | 显示全部楼层

Re:求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....

本菜声明:偶是菜鸟,不是大虾。

8

主题

310

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
发表于 2006-12-6 21:52:00 | 显示全部楼层

Re:求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....

纹理不对,可能材质地址错了

17

主题

258

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2006-12-14 09:50:00 | 显示全部楼层

Re: 求助关于 .x文件加载方面的问题,请前辈们帮帮我啊....

GlobalAlloc
和GlobalFree
比那个new和delete
快多了...
建议用后面的,然后自己管理内存....

1

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2006-12-29 16:44:00 | 显示全部楼层

Re:求助关于 .x文件加载方面的问题,请前辈们帮帮我啊.....

还是忍不住要顶一下这N年前的贴,因为楼主和我犯了一样的错误哈哈,
指向指针数组的变量是**啊,我开始也写的*,狂报错,一改就对了,可是模型导入了,材质全丢了,我渲染出来一片白,楼主搞出来一片黑。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 04:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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