DirectX学习笔记--索引缓存绘图

引言:顶点缓存绘制图形,虽然比较简单,但是简单的图形还好。一个三角形,三个点。但是,比如我们要绘制一个立方体,需要6*2=12个三角形,总共要36个顶点,而实际上表示一个立方体只需要8个顶点就可以了。显然再使用顶点缓存绘图有些划不来,所以就有了索引缓存绘图。定义:索引缓存保存的就是一些索引,用于记录顶点缓存中每一个顶点的索引位置。这样,我们在定义顶点的时候,就不需要重复定义那些
摘要由CSDN通过智能技术生成

引言:

顶点缓存绘制图形,虽然比较简单,但是简单的图形还好。一个三角形,三个点。但是,比如我们要绘制一个立方体,需要6*2=12个三角形,总共要36个顶点,而实际上表示一个立方体只需要8个顶点就可以了。显然再使用顶点缓存绘图有些划不来,所以就有了索引缓存绘图。


定义:

索引缓存保存的就是一些索引,用于记录顶点缓存中每一个顶点的索引位置。这样,我们在定义顶点的时候,就不需要重复定义那些没有用的顶点坐标了,而是给出有用的顶点坐标,然后根据这些坐标在顶点缓存中的索引值给出顶点值,这样,大大方便了我们绘制图形。


步骤:

注意,索引缓存不是单独存在的,而是和顶点缓存配合使用的。使用索引缓存有以下几个步骤:
(这里只写了索引部分的,但是一定要注意索引是建立在顶点基础上的!顶点和索引都有的例子的在下面整个Demo中)
1.设计顶点格式,这个与顶点缓存一样,例如:
//------------绘制图形步骤1.定义灵活顶点格式
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)//坐标为经过变换的屏幕坐标,顶点的颜色

//------------根据上面定义的顶点格式,创建一个顶点的结构体
struct stVertex
{
	float x, y, z,rhw;		//位置坐标
	DWORD dwColor;			//颜色
};

2.创建顶点缓存&索引缓存,创建的方式也与顶点缓存一样。只是方法变成了g_pDevice->CreateIndexBuffer()。
这里只给出创建索引缓存的代码:
LPDIRECT3DINDEXBUFFER9 g_pIB = NULL;

//创建索引缓冲区
	g_pDevice->CreateIndexBuffer(
		48 * sizeof(WORD),      //缓冲区大小
		0,						//缓冲区属性
		D3DFMT_INDEX16,			//索引大小,一般采用16位
		D3DPOOL_DEFAULT,		//存储位置,默认为显卡缓存
		&g_pIB,					//索引缓冲区指针的指针
		NULL					//保留参数,NULL即可
		);

3.填充顶点缓存以及索引缓存。填写的方法还是差不多。填之前要Lock,填完后要UnLock。中间把索引内容拷贝到缓冲区中。
这里只给出填充索引缓存的代码:
	//设置索引数组
	WORD index[] = {0, 1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 5, 0, 5, 6, 0, 6, 7, 0, 7, 
		8, 0, 8, 9, 0, 9, 10, 0, 10, 11, 0, 11, 12, 0, 12, 13, 0, 13, 14, 0, 14, 15, 0, 15, 16, 0, 16, 1};

	WORD *pIneices = NULL;
	//锁缓冲区
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值