void Entity::LoadVertData(std::vector<Vertex::Basic32>& verts, UINT& k) { XMFLOAT3 vMinf3(+MathHelper::Infinity, +MathHelper::Infinity, +MathHelper::Infinity); XMFLOAT3 vMaxf3(-MathHelper::Infinity, -MathHelper::Infinity, -MathHelper::Infinity); XMVECTOR vMin = XMLoadFloat3(&vMinf3); XMVECTOR vMax = XMLoadFloat3(&vMaxf3); for (size_t i = 0; i < mGrid.Vertices.size(); ++i, ++k) { verts[k].Pos = mGrid.Vertices[i].Position; verts[k].Normal = mGrid.Vertices[i].Normal; verts[k].Tex = mGrid.Vertices[i].TexC; //Copy Into The Buttons Messh For Future Collision Check mMeshVertices[i].Pos = mGrid.Vertices[i].Position; mMeshVertices[i].Normal = mGrid.Vertices[i].Normal; XMVECTOR P = XMLoadFloat3(&mMeshVertices[i].Pos); vMin = XMVectorMin(vMin, P); vMax = XMVectorMax(vMax, P); } XMStoreFloat3(&mMeshBox.Center, 0.5f*(vMin + vMax)); XMStoreFloat3(&mMeshBox.Extents, 0.5f*(vMax - vMin)); }
bool D3D11RendererMesh::BuildBuffers(const GeoGen::MeshData& mesh) { D3D11_BUFFER_DESC desc = { 0 }; desc.ByteWidth = sizeof(VertexPositionNormalTexture) * mesh.vertices.size(); desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; desc.Usage = D3D11_USAGE_DEFAULT; m_nVBSize = mesh.vertices.size(); m_nIBSize = mesh.indices.size(); vertices.resize(mesh.vertices.size()); float Infinity = FLT_MAX; XMFLOAT3 vMinf3(+Infinity, +Infinity, +Infinity); XMFLOAT3 vMaxf3(-Infinity, -Infinity, -Infinity); vMin = XMLoadFloat3(&vMinf3); vMax = XMLoadFloat3(&vMaxf3); for (UINT i = 0; i < mesh.vertices.size(); ++i) { vertices[i].position = mesh.vertices[i].pos; vertices[i].normal = mesh.vertices[i].normal; vertices[i].textureCoordinate = mesh.vertices[i].tex; XMVECTOR P = XMLoadFloat3(&vertices[i].position); vMin = XMVectorMin(vMin, P); vMax = XMVectorMax(vMax, P); } D3D11_SUBRESOURCE_DATA vData; vData.pSysMem = &vertices[0]; vData.SysMemPitch = 0; vData.SysMemSlicePitch = 0; if (FAILED(m_d3dDevice->CreateBuffer(&desc, &vData, &m_VB))) { MessageBox(NULL, L"Create Vertex Buffer failed!", L"Error", MB_OK); return false; } D3D11_BUFFER_DESC iDesc = { 0 }; iDesc.ByteWidth = sizeof(UINT) * mesh.indices.size(); iDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; iDesc.Usage = D3D11_USAGE_DEFAULT; indices.resize(mesh.indices.size()); for (UINT i = 0; i < mesh.indices.size(); ++i) { indices[i] = mesh.indices[i]; } D3D11_SUBRESOURCE_DATA iData; iData.pSysMem = &indices[0]; iData.SysMemPitch = 0; iData.SysMemSlicePitch = 0; if (FAILED(m_d3dDevice->CreateBuffer(&iDesc, &iData, &m_IB))) { MessageBox(NULL, L"Create Index Buffer failed!", L"Error", MB_OK); return false; } return true; }
void Entity::UpdateAAB() { XMFLOAT3 vMinf3(+MathHelper::Infinity, +MathHelper::Infinity, +MathHelper::Infinity); XMFLOAT3 vMaxf3(-MathHelper::Infinity, -MathHelper::Infinity, -MathHelper::Infinity); XMVECTOR vMin = XMLoadFloat3(&vMinf3); XMVECTOR vMax = XMLoadFloat3(&vMaxf3); for (size_t i = 0; i < mGrid.Vertices.size(); ++i) { XMVECTOR P = XMLoadFloat3(&mMeshVertices[i].Pos); P = XMVector3TransformCoord(P, XMLoadFloat4x4(&mWorld)); vMin = XMVectorMin(vMin, P); vMax = XMVectorMax(vMax, P); } XMStoreFloat3(&mMeshBox.Center, 0.5f*(vMin + vMax)); XMStoreFloat3(&mMeshBox.Extents, 0.5f*(vMax - vMin)); }
void InstancingAndCullingApp::BuildSkullGeometryBuffers() { std::ifstream fin("Models/skull.txt"); if(!fin) { MessageBox(0, L"Models/skull.txt not found.", 0, 0); return; } UINT vcount = 0; UINT tcount = 0; std::string ignore; fin >> ignore >> vcount; fin >> ignore >> tcount; fin >> ignore >> ignore >> ignore >> ignore; XMFLOAT3 vMinf3(+MathHelper::Infinity, +MathHelper::Infinity, +MathHelper::Infinity); XMFLOAT3 vMaxf3(-MathHelper::Infinity, -MathHelper::Infinity, -MathHelper::Infinity); XMVECTOR vMin = XMLoadFloat3(&vMinf3); XMVECTOR vMax = XMLoadFloat3(&vMaxf3); std::vector<Vertex::Basic32> vertices(vcount); for(UINT i = 0; i < vcount; ++i) { fin >> vertices[i].Pos.x >> vertices[i].Pos.y >> vertices[i].Pos.z; fin >> vertices[i].Normal.x >> vertices[i].Normal.y >> vertices[i].Normal.z; XMVECTOR P = XMLoadFloat3(&vertices[i].Pos); vMin = XMVectorMin(vMin, P); vMax = XMVectorMax(vMax, P); } XMStoreFloat3(&mSkullBox.Center, 0.5f*(vMin+vMax)); XMStoreFloat3(&mSkullBox.Extents, 0.5f*(vMax-vMin)); fin >> ignore; fin >> ignore; fin >> ignore; mSkullIndexCount = 3*tcount; std::vector<UINT> indices(mSkullIndexCount); for(UINT i = 0; i < tcount; ++i) { fin >> indices[i*3+0] >> indices[i*3+1] >> indices[i*3+2]; } fin.close(); D3D11_BUFFER_DESC vbd; vbd.Usage = D3D11_USAGE_IMMUTABLE; vbd.ByteWidth = sizeof(Vertex::Basic32) * vcount; vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER; vbd.CPUAccessFlags = 0; vbd.MiscFlags = 0; D3D11_SUBRESOURCE_DATA vinitData; vinitData.pSysMem = &vertices[0]; HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mSkullVB)); // // Pack the indices of all the meshes into one index buffer. // D3D11_BUFFER_DESC ibd; ibd.Usage = D3D11_USAGE_IMMUTABLE; ibd.ByteWidth = sizeof(UINT) * mSkullIndexCount; ibd.BindFlags = D3D11_BIND_INDEX_BUFFER; ibd.CPUAccessFlags = 0; ibd.MiscFlags = 0; D3D11_SUBRESOURCE_DATA iinitData; iinitData.pSysMem = &indices[0]; HR(md3dDevice->CreateBuffer(&ibd, &iinitData, &mSkullIB)); }