void CloudsVisualSystem3DModelLoader::setupGridVbos()
{
	grid.clear();
	float halfGridDim = gridDim / 2;
	vector<ofVec3f> gridVertices(gridDim * 4);
	for (int i=0; i<gridDim; i++)
	{
		gridVertices[i*4+0].set(i - halfGridDim, 0,-halfGridDim);
		gridVertices[i*4+1].set(i - halfGridDim, 0, halfGridDim);
		gridVertices[i*4+2].set(-halfGridDim, 0, i - halfGridDim);
		gridVertices[i*4+3].set( halfGridDim, 0, i - halfGridDim);
	}
	grid.setVertexData( &gridVertices[0], gridVertices.size(), GL_STATIC_DRAW );
	numGridVertices = gridVertices.size();
	gridVertices.clear();
}
HRESULT Application::InitGridVertexBuffer()
{
	HRESULT hr;

	GridGenerator gridGen;
	gridGen.CreateGrid(2000.0f, 2000.0f, 512, 512, grid, true); // Gives the terrain a size of 2000x2000 and a vertex size of 512x512, then sets it to use a heightmap

	mGridVertexCount = grid.Vertices.size();

	std::vector<SimpleVertex> gridVertices(mGridVertexCount);
	UINT k = 0;

	for (size_t i = 0; i < grid.Vertices.size(); i++, k++)
	{
		gridVertices[k].Pos = grid.Vertices[i].Position;
		gridVertices[k].Normal = grid.Vertices[i].Normal;
		gridVertices[k].TexC = grid.Vertices[i].TexC;
	}

	D3D11_BUFFER_DESC vbd;
	ZeroMemory(&vbd, sizeof(vbd));
	vbd.Usage = D3D11_USAGE_IMMUTABLE;
	vbd.ByteWidth = sizeof(SimpleVertex) * mGridVertexCount;
	vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
	vbd.CPUAccessFlags = 0;
	vbd.MiscFlags = 0;

	D3D11_SUBRESOURCE_DATA InitGridData;
	ZeroMemory(&InitGridData, sizeof(InitGridData));
	InitGridData.pSysMem = &gridVertices[0];

	hr = _pd3dDevice->CreateBuffer(&vbd, &InitGridData, &_pGridVertexBuffer);

	if (FAILED(hr))
		return hr;

	HRESULT hr3;

	GridGenerator gridGen3;
	gridGen3.CreateGrid(7000.0f, 7000.0f, 100, 100, grid3, false);

	mGrid3VertexCount = grid3.Vertices.size();

	std::vector<SimpleVertex> grid3Vertices(mGrid3VertexCount);
	UINT k3 = 0;

	for (size_t i3 = 0; i3 < grid3.Vertices.size(); i3++, k3++)
	{
		grid3Vertices[k3].Pos = grid3.Vertices[i3].Position;
		grid3Vertices[k3].Normal = grid3.Vertices[i3].Normal;
		grid3Vertices[k3].TexC = grid3.Vertices[i3].TexC;
	}

	D3D11_BUFFER_DESC vbd3;
	ZeroMemory(&vbd3, sizeof(vbd3));
	vbd3.Usage = D3D11_USAGE_IMMUTABLE;
	vbd3.ByteWidth = sizeof(SimpleVertex) * mGrid3VertexCount;
	vbd3.BindFlags = D3D11_BIND_VERTEX_BUFFER;
	vbd3.CPUAccessFlags = 0;
	vbd3.MiscFlags = 0;

	D3D11_SUBRESOURCE_DATA InitGrid3Data;
	ZeroMemory(&InitGrid3Data, sizeof(InitGrid3Data));
	InitGrid3Data.pSysMem = &grid3Vertices[0];

	hr3 = _pd3dDevice->CreateBuffer(&vbd3, &InitGrid3Data, &_pGrid3VertexBuffer);

	if (FAILED(hr3))
		return hr3;

	return S_OK;
}