游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5110|回复: 14

D3DXLoadMeshFromXInMemory的问题

[复制链接]

9

主题

37

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2009-7-3 10:17:00 | 显示全部楼层 |阅读模式
D3DXLoadMeshFromXInMemory怎么使用,看了SDK只说是指向内存中的MESH数据,我直接把一个.x文件读到内存中,应该怎么传递第一个参数?

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2009-7-3 11:20:00 | 显示全部楼层

Re:D3DXLoadMeshFromXInMemory的问题

内存块指针

9

主题

37

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2009-7-3 13:07:00 | 显示全部楼层

Re:D3DXLoadMeshFromXInMemory的问题

可以写个代码吗?

我的代码是
FILE *fp=NULL;
fp = fopen(MeshName,"r");
int filelen;
fseek(fp, 0L, SEEK_END);
filelen = ftell(fp);
rewind(fp);
D3DXLoadMeshFromXInMemory(fp,filelen,D3DXMESH_SYSTEMMEM,m_pDevice,0,&m_ppMtrlBuffer,0,&m_pMtrlnum,&m_pMesh);
fclose(fp);

不过这样好像读不到MESH。

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
发表于 2009-7-3 15:30:00 | 显示全部楼层

Re:D3DXLoadMeshFromXInMemory的问题

不应该用fp吧,应该分配一块内存,把文件内容读到内存中,再把内存地址传递给函数。

9

主题

37

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2009-7-3 17:28:00 | 显示全部楼层

Re:D3DXLoadMeshFromXInMemory的问题

这样也不行:
FILE *fp=NULL;
void *buf;
fp = fopen(MeshName,"r");
int filelen;
fseek(fp, 0L, SEEK_END);
filelen = ftell(fp);
rewind(fp);
buf= new char[filelen];
fread(buf,filelen,1,fp);
D3DXLoadMeshFromXInMemory(buf,filelen,D3DXMESH_SYSTEMMEM,m_pDevice,0,&m_ppMtrlBuffer,0,&m_pMtrlnum,&m_pMesh);
fclose(fp);

之前都试过了,SDK中说
[in] Pointer to the memory buffer which contains the mesh data.
就是不知道这个针指到底应该是个什么指针,Sample Browser里面也没有这个的代码。

2

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2009-7-3 18:01:00 | 显示全部楼层

Re:D3DXLoadMeshFromXInMemory的问题

D3DXLoadMeshFromXInMemory完了别忘了delete[] buf啊。

我用成功的写法是:
D3DXLoadMeshFromXInMemory(buf,filelen, D3DXMESH_MANAGED, m_pDevice, &pAdj, &pMat, NULL, &m_dwSets, &m_pMesh);

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2009-7-3 18:11:00 | 显示全部楼层

Re:D3DXLoadMeshFromXInMemory的问题

晕死....不要用stdio里面的文件函数好吧.....用CreateFile

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2009-7-3 20:42:00 | 显示全部楼层

Re:D3DXLoadMeshFromXInMemory的问题

上海人?

9

主题

37

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2009-7-3 22:42:00 | 显示全部楼层

Re: Re:D3DXLoadMeshFromXInMemory的问题

proad: Re3DXLoadMeshFromXInMemory的问题

D3DXLoadMeshFromXInMemory完了别忘了delete[] buf啊。

我用成功的写法是:
D3DXLoadMeshFromXInMemory...


可以把你的代码完整的发一下吗,只要加载这一段就行,可以通过的部份。
是用fopen还是CreateFile?

2

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2009-7-4 07:28:00 | 显示全部楼层

Re: Re: Re:D3DXLoadMeshFromXInMemory的问题

com8u8: Re: Re3DXLoadMeshFromXInMemory的问题

可以把你的代码完整的发一下吗,只要加载这一段就行,可以通过的部份。
是用fopen还是CreateFile?


Win32下的fopen就是封装了CreateFile来实现的,两者并无本质差别,不必用CreateFile,接口太多难懂。

也许你最重要的错误在:
fp = fopen(MeshName,"rb"); //此处应为"rb",而不是"r",否则以文本方式读取文件内容,内容会被截断!此处是一个致命错误!

D3DXLoadMeshFromXInMemory(buf,filelen, D3DXMESH_MANAGED, m_pDevice, &pAdj, &pMat, NULL, &m_dwSets, &m_pMesh);
D3DXLoadMeshFromXInMemory中各参数的含义你看MSDN就能知道,我想我没有必要再找代码,如果确实需要,再发。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 13:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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