2.6 Vertices and cVertexBuffer(顶点缓冲)

 

2.6 Vertices and cVertexBuffer(顶点缓冲)

累死我了:

class cVertexBuffer

{

private:

cGraphics *m_Graphics; // cGraphics父类

IDirect3DVertexBuffer8 *m_pVB; // Vertex buffer COM

DWORD m_NumVertices; // 顶点数量

DWORD m_VertexSize; // 顶点大小

DWORD m_FVF; // FVF 灵活定点格式

BOOL m_Locked; // 标志缓冲是否locked

char *m_Ptr; // 指向缓冲区的指针

 

public:

cVertexBuffer(); // 构造函数

~cVertexBuffer(); // 析构函数

// 获得COM, 大小, FVF, 和顶点数量

IDirect3DVertexBuffer8 *GetVertexBufferCOM();

unsigned long GetVertexSize();

unsigned long GetVertexFVF();

unsigned long GetNumVertices();

// 创建和释放顶点缓冲区

BOOL Create(cGraphics *Graphics, /

unsigned long NumVertices, DWORD Descriptor, /

long VertexSize);

BOOL Free();

BOOL IsLoaded(); // 如果缓冲区分已经被分配返回TRUE.

// 复制一系列顶点到顶点缓冲区

BOOL Set(unsigned long FirstVertex, /

unsigned long NumVertices, void *VertexList);

// 演示顶点缓冲区内容

BOOL Render(unsigned long FirstVertex, /

unsigned long NumPrimitives, DWORD Type);

// Lock unlock 一个顶点缓冲区

BOOL Lock(unsigned long FirstVertex = 0, /

unsigned long NumVertices = 0);

BOOL Unlock();

void *GetPtr(); // 返回一个锁定的顶点缓冲区的指针

};

 

使用cVertextBuffer::Create创建顶点缓冲区,你需要一个cGraphics对象,顶点数量,FVF,每个顶点的大小。没错,你仍然需要自己定义一个顶点结构体,但是不要担心,这并不难,接下来你就会看到。


当你做完所有工作,记得要释放他,调用cVertexBuffer::Free进行释放。在这之前,调用cVertexBuffer::Set用顶点信息填充缓冲区。调用cVertexBuffer::Set使用第一个顶点的索引,顶点的数量和一个指向你定义的定点结构体的数组的指针

现在就可以使用cVertexBuffer::Render来进行绘制渲染多边形了。注意你可以指定从那个顶点开始绘制、要绘制多少面。使用Type参数,如图:(一看就想起来了)

(图在上边)

 

 

直接上例子:

// 如果 g_Graphics 是一个已经初始化过的 cGraphics 对象

// 定义一个顶点结构体和FVF

typedef struct sVertex {

float x, y, z, rhw;

D3DCOLOR Diffuse;

} sVertex;

#define VERTEXFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

cVertexBuffer g_VB;

g_VB.Create(&g_Graphics, 4, VERTEXFVF, sizeof(sVertex));

// Triangle strip vertices in 顺时针方向

sVertex Verts[4] = {

{ 0.0f, 0.0f, 0.0f,1.0f, D3DCOLOR_RGBA(255,0,0,255) },

{ 200.0f, 0.0f, 0.0f,1.0f, D3DCOLOR_RGBA(0,255,0,255) },

{ 0.0f, 200.0f, 0.0f,1.0f, D3DCOLOR_RGBA(0,0,255,255) },

{ 200.0f, 200.0f, 0.0f,1.0f, D3DCOLOR_RGBA(255,255,255,255) },

};

g_VB.Set(0, 4, (void*)&Verts);

// 绘制演示 the triangle strip

g_VB.Render(0, 2, D3DPT_TRIANGLESTRIP);

// 释放 vertex buffer

g_VB.Free();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值