游戏开发论坛

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

创建渐进网格总是失败。。。。。。

[复制链接]

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2009-3-19 15:36:00 | 显示全部楼层 |阅读模式
我想在程序中创建一个渐进网格MESH ,调用了 D3DXGeneratePMesh 这个函数,SDK中说,这个函数只可能有以下的返回值:
1.D3D_OK
2.D3DXERR_CANNOTATTRSORT
3.D3DERR_INVALIDCALL
4.E_OUTOFMEMORY

bool CreateGMesh(LPD3DXMESH lpMesh,,LPD3DXPMESH lpgMesh)
{
       if ( D3D_OK!=D3DXGeneratePMesh(lpMesh,
                         (DWORD*)adjacency->GetBufferPointer(),
                         0,                  // default vertex attribute weights               
                         0,                  // default vertex weights       
                              1,                  // simplify as low as possible               
                         D3DXMESHSIMP_FACE,  // simplify by face count               
                                                        &lpgMesh))
       {
           return false;
       }

       return true;
}

运行时,以上函数返回 false。OK,那么肯定是剩下的3个返回值中的一个??!!!!!
结果下面我分别这么写:

bool CreateGMesh(LPD3DXMESH lpMesh,,LPD3DXPMESH lpgMesh)
{
       if ( D3DXERR_CANNOTATTRSORT==D3DXGeneratePMesh(lpMesh.......
       {
          return false;
       }
       return true;
}


bool CreateGMesh(LPD3DXMESH lpMesh,,LPD3DXPMESH lpgMesh)
{
       if ( D3DERR_INVALIDCALL==D3DXGeneratePMesh(lpMesh.......
       {
          return false;
       }
       return true;
}


bool CreateGMesh(LPD3DXMESH lpMesh,,LPD3DXPMESH lpgMesh)
{
       if ( E_OUTOFMEMORY==D3DXGeneratePMesh(lpMesh.......
       {
          return false;
       }
       return true;
}

结果,这3种写法,全部返回 true。。。。。。。。。
也就是说,这个 D3DXGeneratePMesh 函数的返回值,不是 D3D_OK,但,也不是剩下的3种。。。。
这不是忽悠人吗????

现在这个函数没有办法执行正确。。。。。。。
大家用过这个函数没有啊。。。。。。。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-3-19 16:42:00 | 显示全部楼层

Re:创建渐进网格总是失败。。。。。。

除了在学dx的时候用过一次,后来就再没弄过这个函数了
在我看来这是一个有点鸡肋的函数
不管你用progressMesh精简还是细分都不会得到太好的结果
因为这样的通用算法无法区分面的重要性,而且也很慢

对于地形或者一些特别的模型,我更愿意自己写lod算法
对于普通模型也更倾向于让模型师做预处理,生成多个lod

对于dx10或者dx11,你更可以把镶嵌算法完全弄到gpu上进行

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2009-3-19 17:08:00 | 显示全部楼层

Re:创建渐进网格总是失败。。。。。。

NND,火大了,搞了一整天都搞不好,放弃此函数
[em4] [em4] [em4] [em4] [em4] [em4] [em4]

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-19 17:13:00 | 显示全部楼层

Re: Re:创建渐进网格总是失败。。。。。。

clayman: Re:创建渐进网格总是失败。。。。。。

除了在学dx的时候用过一次,后来就再没弄过这个函数了
在我看来这是一个有点鸡肋的函数
不管你用progress...

Hi Clayman,
看收件箱。
或者你有MSN吗?

3

主题

81

帖子

209

积分

中级会员

Rank: 3Rank: 3

积分
209
QQ
发表于 2012-6-9 21:35:00 | 显示全部楼层

Re: 创建渐进网格总是失败。。。。。。

今天也发生了和楼主一样的问题。

检查再三,没有发现,对照着龙书的源码进行查看。

问题果然被找到了。。

hr = Mesh->OptimizeInplace(
                D3DXMESHOPT_ATTRSORT|
                D3DXMESHOPT_COMPACT|
                D3DXMESHOPT_VERTEXCACHE,
                (DWORD*)adjBuffer->GetBufferPointer(),
                (DWORD*)adjBuffer->GetBufferPointer(), //原先的代码少了这一行。
                0,0);

出错原因很简单,adjacencyBuffer在optimize的时候被使用了,如果不把optimize后的 adjacencyBuffer赋值回去,
那么在
D3DXGeneratePMesh(
                Mesh,
                (DWORD*)adjBuffer->GetBufferPointer(),
                0,
                0,
                1,
                D3DXMESHSIMP_FACE,
                &ampMesh);
此处用到 adjacencyBuffer 时,数据已经出错了。

不知道楼主是不是和我一样的原因
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-29 12:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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