Direct3D-索引缓存

本文详细介绍了如何使用Direct3D索引缓存技术在顶点缓存的基础上绘制正方形图形,包括创建索引缓存和顶点缓存对象,设置顶点结构,初始化顶点坐标和索引,以及最终绘制图形的操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Direct3D索引缓存其实就是在顶点缓存的基础上对固定的顶点进行连接,比如我们平面有4个点,分别再左右上角,和左右下角,从左上角开始按顺时针顺序给他们索引依次为0,1,2,3。(这些索引是你在顶点结构体里面设置的顺序)。


接着我们要利用这四个点绘制出一个正方形我们只需要利用索引缓存进行标号,比如012就形成了正方形右边的三角形,接着023就形成了另一边的三角形,这样就绘制出了一个正方形。是不是觉得不是很难。我们来看具体操作。

现在创建索引缓存和顶点缓存对象

LPDIRECT3DVERTEXBUFFER9		g_pVertexBuffer	=NULL;
LPDIRECT3DINDEXBUFFER9		g_pIndexBuffer	=NULL;
然后设置顶点结构

struct  VECREX3
{
	FLOAT x,y,z;
	WORD color;
};
#define VECREX3_FVF (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)//灵活顶点格式
这些步骤基本和顶点缓存差不多


然后再初始化顶点坐标和索引

srand(timeGetTime());


	if (FAILED(g_pd3dDevic->CreateVertexBuffer(8*sizeof(VECREX3),0,VECREX3_FVF,
		D3DPOOL_DEFAULT,&g_pVertexBuffer,NULL)))
	{
		return E_FAIL;
	}

	VECREX3 vertexs[]={
		{270.0f,100.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),},//0
		{540.0f,100.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),},//1
		{810.0f,100.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),},//2
		{810.0f,300.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),},//3
		{810.0f,500.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),},//4
		{540.0f,500.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),},//5
		{270.0f,500.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),},//6
		{270.0f,300.0f,0.0f,D3DCOLOR_XRGB(rand()%256,rand()%256,rand()%256),}//7
	};

	VOID *pVertices;
	if (FAILED(g_pVertexBuffer->Lock(0,sizeof(vertexs),(void**)&pVertices,0)))
	{
		return E_FAIL;
	}

	memcpy(pVertices,vertexs,sizeof(vertexs));
	g_pVertexBuffer->Unlock();


	if (FAILED(g_pd3dDevic->CreateIndexBuffer(36*sizeof(DWORD),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,
		&g_pIndexBuffer,NULL)))
	{
		return E_FAIL;
	}

	WORD indices[]={
		0,1,7,
		1,2,3,

		3,4,5,
		5,6,7

	};

	WORD *pIndices=NULL;
	if (FAILED(g_pIndexBuffer->Lock(0,0,(void**)&pIndices,0)))
	{
		return E_FAIL;
	}
	memcpy(pIndices,indices,sizeof(indices));

	g_pIndexBuffer->Unlock();

细心的人会发现我们这次的顶点里面少了设置了很多坐标,是的,因为索引缓存是将这些点在顶点数组里的下标来进行连接的017,123,345,567这些就是指连接那些顶点的顺序。

最后绘制图形也有一点变化如下

g_pd3dDevic->BeginScene();



	g_pd3dDevic->SetRenderState( D3DRS_LIGHTING, FALSE);
	g_pd3dDevic->SetStreamSource(0,g_pVertexBuffer,0,sizeof(VECREX3));
	g_pd3dDevic->SetFVF(VECREX3_FVF);
	g_pd3dDevic->SetIndices(g_pIndexBuffer);
	g_pd3dDevic->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,8,0,4);
8代表8个顶点,4代表4个图元。



索引缓存更多具体解释请看http://blog.youkuaiyun.com/poem_qianmo/article/details/8304741


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值