游戏开发论坛

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

DX中模型导入后贴图与材质问题

[复制链接]

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2010-8-13 11:23:00 | 显示全部楼层 |阅读模式
我有一个高达的模型(包含贴图,骨骼动画)

我通过如下代码导入:

HRESULT hr = 0;

        //
        // Load the XFile data.
        //

        ID3DXBuffer* adjBuffer  = 0;
        ID3DXBuffer* mtrlBuffer = 0;
        DWORD        numMtrls   = 0;

        hr = D3DXLoadMeshFromX(  
                "..\\new3dproj\\gundam1\\1.X",
                D3DXMESH_MANAGED,
                Device,
                &adjBuffer,
                &mtrlBuffer,
                0,
                &numMtrls,
                &Mesh);

        if(FAILED(hr))
        {
                ::MessageBox(0, "D3DXLoadMeshFromX() - FAILED", 0, 0);
                return false;
        }

        //
        // Extract the materials, and load textures.
        //

        if( mtrlBuffer != 0 && numMtrls != 0 )
        {
                D3DXMATERIAL* mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();

                for(int i = 0; i < numMtrls; i++)
                {
                        mtrls.MatD3D.Ambient = mtrls.MatD3D.Diffuse;
                        Mtrls.push_back( mtrls.MatD3D );

                        if( mtrls.pTextureFilename != 0 )
                        {
                                IDirect3DTexture9* tex = 0;
                                D3DXCreateTextureFromFile(
                                        Device,
                                        mtrls.pTextureFilename,
                                        &tex);

                                Textures.push_back( tex );
                        }
                        else
                        {
                                Textures.push_back( 0 );
                        }
                }
        }
        d3d::Release<ID3DXBuffer*>(mtrlBuffer);

           hr = Mesh->OptimizeInplace(               
                D3DXMESHOPT_ATTRSORT |
                D3DXMESHOPT_COMPACT  |
                D3DXMESHOPT_VERTEXCACHE,
                (DWORD*)adjBuffer->GetBufferPointer(),
                0, 0, 0);

        d3d::Release<ID3DXBuffer*>(adjBuffer); // done w/ buffer

        if(FAILED(hr))
        {
                ::MessageBox(0, "OptimizeInplace() - FAILED", 0, 0);
                return false;
        }
           Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);


以上是模型导入和材质,贴图设置的

然后灯光代码如下:

          D3DXVECTOR3 dir(1.0f, -0.0f, 0.25f);
        D3DXCOLOR   c = d3d::WHITE;//(这个是例子定义的的XRGB格式)
        D3DLIGHT9 dirLight = d3d::InitDirectionalLight(&dir, &c);

        //
        // Set and Enable the light.
        //

        Device->SetLight(0, &dirLight);
        Device->LightEnable(0,true);

        //
        // Set lighting related render states.
        //

        Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);
        Device->SetRenderState(D3DRS_SPECULARENABLE, false);

最后是渲染部分:(BIGEN SCENE什么的不贴了)

                     for(int i = 0; i < Mtrls.size(); i++)
                {
                        Device->SetMaterial( &Mtrls );
                        Device->SetTexture(0, Textures);
                        Mesh->DrawSubset(i);
                }       

求问为何会出现贴图不显示,模型身上大部分贴图只会根据光源颜色而改变的情况呢?]
另外,当模型成功读取到贴图以后,内存使用量异常(33MB左右的模型文件,消耗内存超过500MB,并且帧数非常低),请问是我贴图读取时造成内存泄露了还是模型文件本身问题?
(本人新手,请各位赐教,感激不尽)

1

主题

10

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2010-8-13 12:08:00 | 显示全部楼层

Re:DX中模型导入后贴图与材质问题

你看贴图读出来了吗,mtrls.pTextureFilename 的路径是哪里

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2010-8-13 13:54:00 | 显示全部楼层

Re:DX中模型导入后贴图与材质问题

高大的关节部分读出来了,其他主要部件(大部分)都没有读出来

文件路径我用OUTPUTDEBUGSTRING 输出看,是文件名:01.bmp,02.bmp之类的

没有其他路径

请问哪出了问题?

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2010-8-13 14:00:00 | 显示全部楼层

Re:DX中模型导入后贴图与材质问题

发现问题了,的确是贴图没有读出,似乎是必须放在项目根目录下才能够被读取

有什么办法指定贴图路径吗?

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2010-8-13 14:37:00 | 显示全部楼层

Re:DX中模型导入后贴图与材质问题

内存泄露问题也已经发现,应该是贴图问题问题,一旦能够成功读取贴图,内存使用量马上上升到500MB以上,如果不渲染,则帧数正常,一旦渲染,帧数低于5

请问究竟贴图哪里出错,在读取模型贴图方面有什么讲究吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 04:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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