Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void PhysicsMesh::DefineInputlayout()
- {
- m_VertexBufferStride = sizeof(float3);
- // Define the input layout
- D3D10_INPUT_ELEMENT_DESC layout[] =
- {
- { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
- };
- UINT numElements = sizeof(layout)/sizeof(layout[0]);
- // Create the input layout
- D3D10_PASS_DESC PassDesc;
- // Get the pass descriptor from the effect technique
- m_pDefaultTechnique->GetPassByIndex(0)->GetDesc(&PassDesc);
- m_pLevel->GetDevice()->CreateInputLayout(layout, numElements, PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, &m_pVertexLayout);
- }
- void PhysicsMesh::BuildIndexBuffer()
- {
- MIT meshIt = m_Meshes.begin();
- for(meshIt; meshIt != m_Meshes.end(); ++meshIt){
- m_NumIndices = (*meshIt)->GetNumFaces()*3;
- ID3D10Buffer *buffer;
- D3D10_BUFFER_DESC bd;
- bd.Usage = D3D10_USAGE_DEFAULT;
- bd.ByteWidth = sizeof(float3) * (*meshIt)->GetNumFaces() *3;
- bd.BindFlags = D3D10_BIND_INDEX_BUFFER;
- bd.CPUAccessFlags = 0;
- bd.MiscFlags = 0;
- D3D10_SUBRESOURCE_DATA initData;
- initData.pSysMem = (*meshIt)->GetTrianglesPointer();
- HR(m_pLevel->GetDevice()->CreateBuffer(&bd, &initData, &buffer));
- m_pIndexBuffers.push_back(buffer);
- }
- }
- void PhysicsMesh::BuildVertexBuffer()
- {
- MIT meshIt = m_Meshes.begin();
- for(meshIt; meshIt != m_Meshes.end(); ++meshIt){
- ID3D10Buffer *buffer;
- D3D10_BUFFER_DESC bd;
- bd.Usage = D3D10_USAGE_DEFAULT;
- bd.ByteWidth = sizeof(float3) * (*meshIt)->GetNumVertices();
- bd.BindFlags = D3D10_BIND_VERTEX_BUFFER;
- bd.CPUAccessFlags = 0;
- bd.MiscFlags = 0;
- D3D10_SUBRESOURCE_DATA initData;
- initData.pSysMem = (*meshIt)->GetVertexPointer();
- HR(m_pLevel->GetDevice()->CreateBuffer(&bd, &initData, &buffer));
- m_pVertexBuffers.push_back(buffer);
- }
- }
- void PhysicsMesh::Initialize(ContentManager *pContentManager)
- {
- CreateEffect(pContentManager);
- ObjPhysicsReader *physRdr = new ObjPhysicsReader(m_filename);
- physRdr->Read();
- m_Meshes.assign(physRdr->GetInputMeshBegin(), physRdr->GetInputMeshEnd());
- delete physRdr;
- DefineInputlayout();
- BuildVertexBuffer();
- BuildIndexBuffer();
- Rotate(D3DXVECTOR3(-1.57079633f,0,0));
- if(m_Type == Concave)
- BuildConcave();
- else
- BuildConvex();
- }
- void PhysicsMesh::Draw(const RenderContext* pRenderContext)
- {
- // Update Shader matrix variables
- D3DXMATRIX matView = pRenderContext->GetCamera()->GetView();
- D3DXMATRIX matProj = pRenderContext->GetCamera()->GetProj();
- m_pWorldViewProjectionVariable->SetMatrix((float*)&(m_World*matView*matProj));
- // Set the input layout
- m_pLevel->GetDevice()->IASetInputLayout(m_pVertexLayout);
- for(UINT i = 0; i < m_pVertexBuffers.size(); ++i){
- // Set vertex buffer(s)
- UINT offset = 0;
- m_pLevel->GetDevice()->IASetVertexBuffers( 0, 1, &m_pVertexBuffers.at(i), &m_VertexBufferStride, &offset);
- // Set index buffer
- m_pLevel->GetDevice()->IASetIndexBuffer(m_pIndexBuffers.at(i), DXGI_FORMAT_R32_UINT, 0);
- // Set primitive topology
- m_pLevel->GetDevice()->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
- D3D10_TECHNIQUE_DESC techDesc;
- m_pDefaultTechnique->GetDesc( &techDesc );
- for( UINT p = 0; p < techDesc.Passes; ++p )
- {
- m_pDefaultTechnique->GetPassByIndex(p)->Apply(0);
- m_pLevel->GetDevice()->DrawIndexed(m_NumIndices, 0, 0 );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement