fjfhnnhy 2013-11-30 13:22 采纳率: 0%
浏览 867

使用mesh创建地形网格时大小受限

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,谁知道为什么吗?谢谢。

  • 写回答

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