从0开发游戏引擎---索引缓存

索引缓存的作用

我们填充了6个顶点结构,但是一个矩形只有4个顶点。有两个顶点被写入缓存了两次,这样可能会造成-一些内存的浪费,特别是需要渲染的模型很复杂的时候,那时重复的顶点会变得更多,所以在D3D中还引入了索引缓存。索引缓存( (Index Buffers) ),人如其名,它就是一个索引,用于记录顶点缓存中每一个顶点的索引位置。
例如一个矩形:
在这里插入图片描述

如果在没有使用索引缓存的情况下,我们需要创建一个这样的顶点缓存:
vertex={v1,v2,v3,v3,v2,v4}.
需要六个顶点来渲染这个矩形,如果我们使用索引缓存的话,可以这样实现:
vertex={v1,v2,v3,v4}
index={1,2,3,3,2,4}.

索引缓存就好比是数组的下标,可以通过索引找到顶点缓

使用步骤

参考顶点缓存

 #include<d3d9.h>

#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")


#define WINDOWWIDTH 800
#define WINDOWHEIGHT 600


// 函数声明
bool InitializeD3D(HWND hWnd);
bool InitializeObjects();
void RenderScene();
void Shutdown();


//IDirect3D9 对象
IDirect3D9 * g_D3d9 = NULL;
//设备对象
IDirect3DDevice9 * g_D3DDevice = NULL;



//----------------------设置顶点缓存四部曲1:设计顶点缓存格式-----------------//
//保存几何体的顶点缓冲区。
IDirect3DVertexBuffer9 * g_VertexBuffer = NULL;

//设置索引缓存
IDirect3DIndexBuffer9 *g_IndexBuffer=NULL;

//自定义顶点类型的结构
struct TriangleD3DVertex
{
   
   
	float x, y, z, rhw;
	unsigned long color;
};


//我们自定义的FVF,它描述了我们的自定义顶点结构。
#define D3DFVF_VERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

//回调函数
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   
   
	switch(msg)
	{
   
   
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
		break;

	case WM_KEYUP:
		if(wParam == VK_ESCAPE)
		{
   
   
			PostQuitMessage(0);
		}
		break;
	}

	return DefWindowProc(hWnd, msg, wParam, lParam);
}


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
{
   
   
	WNDCLASSEX wndclass= {
   
   0};
	wndclass.cbSize = sizeof( WNDCLASSEX ) ;     //设置结构体的字节数大小
	//窗口类的附加内存相当于缓冲区  一般为0
	wndclass.cbClsExtra = 0;
	//窗口的附加内存相当于缓冲区  一般为0
	wndclass.cbWndExtra = 0;
	//获取一个笔刷  作用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank---7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值