游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2294|回复: 8

D3D中申请VertexBuffe的空间是否有上限?

[复制链接]

2

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2006-4-26 16:40:00 | 显示全部楼层 |阅读模式
在做一个大地形的引擎,发现当顶点数大于257×257时,顶点不能全部渲染出来,后面的顶点没被渲染,不知是否VertexBuffer空间有上限,请指教。下面是用到的代码片断:

生成VertexBuffer和IndexBuffer:
if(FAILED(m_device->CreateVertexBuffer(m_iNumVertices*sizeof(TERRAINVERTEX), D3DUSAGE_WRITEONLY,
                D3DFVF_TERRAINVERTEX, D3DPOOL_MANAGED, &m_pVB, NULL) ) )
        {
                m_pVB = NULL;
                MessageBox(NULL, "can not create the vertex buffer", "D3DEngine",MB_OK);
                :ostQuitMessage(0);
        }
        if(FAILED(m_device->CreateIndexBuffer(
                                                /*m_iNumCellsPerRow * m_iNumCellsPerCol * 2 * 3 * sizeof(DWORD)*/25000*sizeof(DWORD),
                                D3DUSAGE_WRITEONLY,
                                                D3DFMT_INDEX32,
                                                D3DPOOL_MANAGED,
                                                &m_pIB,
                                                0)))
        {
                m_pIB = NULL;
                MessageBox(NULL, "can not create the index buffer", "D3DEngine",MB_OK);
                ::PostQuitMessage(0);               
        }


初始化VertexBuffer:
void CQuadTree::InitVertexBuf()   //初始化顶点缓冲,渲染时只改变索引缓冲加快效率
{
        TERRAINVERTEX * VertexBuf = 0;
        float texspace = 1.0 / m_iNumCellsPerRow;
        float x, z;
        if(m_pVB == NULL) return;

        m_pVB->Lock(0, 0, (void **) &VertexBuf, 0);
        for(int i = 0; i < m_iNumVertsPerRow; i++)
                for(int j = 0; j < m_iNumVertsPerCol; j++)
                {
                        ArrtoWorld(i, j, x, z);
                        VertexBuf[i * m_iNumVertsPerRow +j] = TERRAINVERTEX(x, GetHeightEntry(i, j),
                                z, j * texspace, i * texspace);
       
                }
        m_pVB->Unlock();

}
然后根据四叉树动态填充IndexBuffer,最后渲染代码为:

       
        D3DXMATRIX mat;
        D3DXMatrixIdentity(&mat);
        m_device->SetTransform(D3DTS_WORLD, &mat);

    m_device->SetStreamSource(0, m_pVB, 0, sizeof(TERRAINVERTEX));
        m_device->SetFVF(D3DFVF_TERRAINVERTEX);
        m_device->SetIndices(m_pIB);
               
        m_device->SetTexture(0, m_tex);

                // turn off lighting since we're lighting it ourselves
        m_device->SetRenderState(D3DRS_LIGHTING, false);
        m_device->DrawIndexedPrimitive(
                        D3DPT_TRIANGLELIST,
                        0,
                        0,
                        m_IndexBuf.size(),
                        0,
                        m_IndexBuf.size()/3);

        m_device->SetRenderState(D3DRS_LIGHTING, true);
        m_IndexBuf.clear();

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2006-4-26 17:02:00 | 显示全部楼层

Re:D3D中申请VertexBuffe的空间是否有上限?

16位的是0-2^16,试试32位的index吧,不过不是所有硬件都能支持.

2

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2006-4-26 17:31:00 | 显示全部楼层

Re: D3D中申请VertexBuffe的空间是否有上限?

我是用了32位的index,但还是不行。难道是机器的问题,但如果是机器问题应该申请不了吧,但我是申请成功的

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-4-26 18:33:00 | 显示全部楼层

Re:D3D中申请VertexBuffe的空间是否有上限?

是有上限的,不然要内存干什么?

2

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2006-4-26 21:02:00 | 显示全部楼层

Re:D3D中申请VertexBuffe的空间是否有上限?

先撇开内存的限制,就indexbufer的上限应该是2^32啊,运行257×257的地图应该没问题的,哪位高手帮我看看程序有什么问题?谢了

8

主题

182

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
发表于 2006-4-27 08:41:00 | 显示全部楼层

Re:D3D中申请VertexBuffe的空间是否有上限?

把地形分块,要不即使可以,速度也慢的一塌糊涂吧

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-4-27 11:36:00 | 显示全部楼层

Re:D3D中申请VertexBuffe的空间是否有上限?

看看调试信息输出的是不是有错误。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-4-27 11:37:00 | 显示全部楼层

Re:D3D中申请VertexBuffe的空间是否有上限?

是不是视锥远截面设置的问题?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-4-27 13:10:00 | 显示全部楼层

Re:D3D中申请VertexBuffe的空间是否有上限?

8楼最有可能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 08:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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