游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1754|回复: 3

请问一个读取X文件 MESH时的郁闷的问题

[复制链接]

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2005-3-3 11:45:00 | 显示全部楼层 |阅读模式
代码如下:

        //我们将通过该接口指针访问Mesh对象的材质和纹理
        LPD3DXBUFFER pD3DXMtrlBuffer;
        //从.x文件创建Mesh对象
        :3DXLoadMeshFromX(
                m_pFileName, D3DXMESH_SYSTEMMEM, m_pDevice,
                NULL, &pD3DXMtrlBuffer, NULL,
                &m_dwNumSubsets,        //返回模型中子集的数目
                &m_pMesh );                        //返回Mesh对象的接口指针

        m_pMeshMaterials = new D3DMATERIAL9[m_dwNumSubsets];
        m_pMeshTextures = new LPDIRECT3DTEXTURE9[m_dwNumSubsets];

        //从接口指针pD3DXMtrlBuffer获得各个子集的材质和纹理图片的文件名
        D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
        for( DWORD i=0; i < m_dwNumSubsets; i++ )
        {
                //复制子集的材质
                m_pMeshMaterials = d3dxMaterials.MatD3D;
                //Direct3D在调入Mesh模型时,没有设置材质的环境光颜色,
                //这里把它设置成和漫反射一样的颜色。
                m_pMeshMaterials.Ambient = m_pMeshMaterials.Diffuse;

                //调入纹理图片,这里出错!!!!!!!
                ::D3DXCreateTextureFromFile(
                        m_pDevice,
                        d3dxMaterials.pTextureFilename,        //纹理图片的文件名
                        &m_pMeshTextures );
        }
        pD3DXMtrlBuffer->Release();        //释放接口

当我用unicode编译的时候,出现error C2664: “D3DXCreateTextureFromFileW” : 不能将参数 2 从“LPSTR”转换为“LPCWSTR”
        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

难道不支持unicode么?d3dx9mesh.h也没有关于unicode的定义,郁闷啊,谁告诉我怎么办啊! [em4] [em4] [em4]

5

主题

21

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2005-3-3 12:31:00 | 显示全部楼层

Re:请问一个读取X文件 MESH时的郁闷的问题

参见
DX9BSDK\SAMPLES\C++\DIRECT3D\EffectEdit\RenderView.cpp

TCHAR strPath[MAX_PATH]; 
        EE_FindMediaFileCb( strPath, sizeof(strPath), strBackTexture );
        if( FAILED( hr = D3DXCreateTextureFromFile( m_pd3dDevice, strPath, &m_pBackgroundTexture) ) )
        {
楼主的定义是什么?

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2005-3-3 13:04:00 | 显示全部楼层

Re:请问一个读取X文件 MESH时的郁闷的问题

不是啊,D3DXMATERIAL的pTextureFilename成员是LPSTR类型,

可是我用的是unicode版本

D3DXCreateTextureFromFileW需要的是LPWSTR啊

我就是想知道为什么D3DXMATERIAL没有相应的unicode版本?

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
 楼主| 发表于 2005-3-4 10:50:00 | 显示全部楼层

Re:请问一个读取X文件 MESH时的郁闷的问题

找到方法了,好像似乎也许,x文件保存的都是非unicode的,所以必须转换一下。

        // Get a path to the texture
        WCHAR strPath[512];
        if( d3dxMaterials.pTextureFilename != NULL )
        {
            WCHAR wszBuf[MAX_PATH];
            MultiByteToWideChar( CP_ACP, 0, d3dxMaterials.pTextureFilename, -1, wszBuf, MAX_PATH );
            wszBuf[MAX_PATH - 1] = L'\0';
            DXUTFindDXSDKMediaFileCch( strPath, 512, wszBuf );

            // Load the texture
            D3DXCreateTextureFromFile( pd3dDevice, strPath, &g_ppMeshTextures );
        }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 10:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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