D3DXCreateMeshFVF((nRows-1)*(nCols-1)*2,(nRows-1)*(nCols-1)*4 , D3DXMESH_MANAGED , TERRAINVERTEX::FVF, m_pd3dDevice, &m_pMesh);//(nRows-1)*(nCols-1)*4
TERRAINVERTEX pVertices=NULL;
m_pMesh->LockVertexBuffer(0, (void*)&pVertices);
这是我用mesh创建地形网格的部分代码,创建到126*126的时候都可以,但是到128*128就会报错,而且定位到 m_pMesh->LockVertexBuffer(0, (void**)&pVertices);处,我发现之所有128*128出错是因为D3DXCreateMeshFVF的第二个参数超过65535,谁知道为什么吗?谢谢。
使用mesh创建地形网格时大小受限
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-26 22:19关注
该回答引用ChatGPT-3.5
根据你提供的信息,问题可能是由于使用的索引缓冲区类型造成的。在DirectX中,使用16位索引缓冲区时,索引的最大数量是65535(2^16-1)。
在你的代码中,你使用了
D3DXCreateMeshFVF
函数创建网格,并指定了D3DXMESH_MANAGED
标志来指示使用可管理的内存来存储网格数据。这个函数的第二个参数是网格的索引数量,你计算索引数量的方式是(nRows-1)*(nCols-1)*4
。
在网格的索引缓冲区中,每个四边形需要4个索引来定义其顶点。所以,你计算的索引数量是每个四边形有4个索引的情况下的总数。
然而,当你的地形网格的大小为128x128时,计算得到的索引数量超过了65535,导致创建网格失败。
解决这个问题的一种方法是使用32位索引缓冲区,它可以支持更大的索引数量。你可以尝试将索引缓冲区的类型更改为
D3DXMESH_32BIT
,如下所示:D3DXCreateMeshFVF((nRows-1)*(nCols-1)*2, (nRows-1)*(nCols-1)*4, D3DXMESH_MANAGED | D3DXMESH_32BIT, TERRAINVERTEX::FVF, m_pd3dDevice, &m_pMesh);
这将使用32位索引缓冲区创建网格,从而允许你超过65535个索引。
请注意,使用32位索引缓冲区会消耗更多的内存,因为每个索引将使用4字节而不是2字节。确保你的系统具有足够的内存来容纳更大的索引缓冲区。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
- ¥15 用windows做服务的同志有吗
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 一直显示正在等待HID—ISP