游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1843|回复: 2

可不可以在一个.cpp文件中写两个顶点缓存

[复制链接]

2

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-11-20 18:26:00 | 显示全部楼层 |阅读模式
可不可以在一个.cpp文件中写两个顶点缓存

                Device->CreateVertexBuffer(
                6 * sizeof(Vertex),
                D3DUSAGE_WRITEONLY,
                Vertex::FVF ,
                D3DPOOL_MANAGED,
                &BackDropVB,
                0);

        Vertex* v;
        BackDropVB->Lock(0, 0, (void**)&v, 0);

        // quad built from two triangles, note texture coordinates:
        v[0] = Vertex(-10.0f, -10.0f, 5.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);
        v[1] = Vertex(-10.0f,  10.0f, 5.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);
        v[2] = Vertex( 10.0f,  10.0f, 5.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);

        v[3] = Vertex(-10.0f, -10.0f, 5.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);
        v[4] = Vertex( 10.0f,  10.0f, 5.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);
        v[5] = Vertex( 10.0f, -10.0f, 5.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f);

        BackDropVB->Unlock();


        Device->CreateVertexBuffer(
                        24 * sizeof(Vertex),                                             //6
                        D3DUSAGE_WRITEONLY,
                        Vertex::FVF,
                        D3DPOOL_MANAGED,
                        &_vb,                                            //BkGndQuad,
                        0);

                Vertex* v2;
            _vb->Lock(0, 0, (void**)&v2, 0);

        // build box

        // fill in the front face vertex data
        v[0] = Vertex(-1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);
        v[1] = Vertex(-1.0f,  1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);
        v[2] = Vertex( 1.0f,  1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f);
        v[3] = Vertex( 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);

        // fill in the back face vertex data
        v[4] = Vertex(-1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
        v[5] = Vertex( 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f);
        v[6] = Vertex( 1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
        v[7] = Vertex(-1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);

        // fill in the top face vertex data
        v[8]  = Vertex(-1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f);
        v[9]  = Vertex(-1.0f, 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
        v[10] = Vertex( 1.0f, 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f);
        v[11] = Vertex( 1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);

        // fill in the bottom face vertex data
        v[12] = Vertex(-1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f);
        v[13] = Vertex( 1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f);
        v[14] = Vertex( 1.0f, -1.0f,  1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f);
        v[15] = Vertex(-1.0f, -1.0f,  1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f);

        // fill in the left face vertex data
        v[16] = Vertex(-1.0f, -1.0f,  1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        v[17] = Vertex(-1.0f,  1.0f,  1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f);
        v[18] = Vertex(-1.0f,  1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f);
        v[19] = Vertex(-1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f);

        // fill in the right face vertex data
        v[20] = Vertex( 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        v[21] = Vertex( 1.0f,  1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f);
        v[22] = Vertex( 1.0f,  1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f);
        v[23] = Vertex( 1.0f, -1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);

        _vb->Unlock();                                            //调试时说这边出现不能计算表达式的值的错误


请高手解答 菜鸟在这先谢过了

4

主题

137

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2010-11-21 08:02:00 | 显示全部楼层

Re:可不可以在一个.cpp文件中写两个顶点缓存

肯定不是2个buff的问题 仔细检查吧

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2010-11-21 20:57:00 | 显示全部楼层

Re:可不可以在一个.cpp文件中写两个顶点缓存

你用V2锁定了第二个BUFFER,但是你却没有用到V2去修改第二个BUFFER的值。
你用V锁定了第一个BUFFER,但是你却想用V去修改第二个BUFFER的值,从你用V[6]开始就已经发生了数组越界。

且不说你的数组越界,你在对第一个BUFFER解锁后,再使用V进行写数据就已经是非法操作了,SO...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-29 05:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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