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; }