Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1. void PhysicsMesh::DefineInputlayout()
  2. {
  3.     m_VertexBufferStride = sizeof(float3);
  4.     // Define the input layout
  5.     D3D10_INPUT_ELEMENT_DESC layout[] =
  6.     {
  7.         { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
  8.     };
  9.     UINT numElements = sizeof(layout)/sizeof(layout[0]);
  10.  
  11.     // Create the input layout
  12.     D3D10_PASS_DESC PassDesc;
  13.     // Get the pass descriptor from the effect technique
  14.     m_pDefaultTechnique->GetPassByIndex(0)->GetDesc(&PassDesc);
  15.     m_pLevel->GetDevice()->CreateInputLayout(layout, numElements, PassDesc.pIAInputSignature, PassDesc.IAInputSignatureSize, &m_pVertexLayout);
  16. }
  17.  
  18. void PhysicsMesh::BuildIndexBuffer()
  19. {
  20.     MIT meshIt = m_Meshes.begin();
  21.     for(meshIt; meshIt != m_Meshes.end(); ++meshIt){
  22.         m_NumIndices = (*meshIt)->GetNumFaces()*3;
  23.  
  24.         ID3D10Buffer *buffer;
  25.         D3D10_BUFFER_DESC bd;
  26.         bd.Usage = D3D10_USAGE_DEFAULT;
  27.         bd.ByteWidth = sizeof(float3) * (*meshIt)->GetNumFaces() *3;
  28.         bd.BindFlags = D3D10_BIND_INDEX_BUFFER;
  29.         bd.CPUAccessFlags = 0;
  30.         bd.MiscFlags = 0;
  31.  
  32.         D3D10_SUBRESOURCE_DATA initData;
  33.         initData.pSysMem = (*meshIt)->GetTrianglesPointer();
  34.  
  35.         HR(m_pLevel->GetDevice()->CreateBuffer(&bd, &initData, &buffer));
  36.         m_pIndexBuffers.push_back(buffer);
  37.     }
  38. }
  39.  
  40. void PhysicsMesh::BuildVertexBuffer()
  41. {
  42.     MIT meshIt = m_Meshes.begin();
  43.     for(meshIt; meshIt != m_Meshes.end(); ++meshIt){
  44.         ID3D10Buffer *buffer;
  45.         D3D10_BUFFER_DESC bd;
  46.         bd.Usage = D3D10_USAGE_DEFAULT;
  47.         bd.ByteWidth = sizeof(float3) * (*meshIt)->GetNumVertices();
  48.         bd.BindFlags = D3D10_BIND_VERTEX_BUFFER;
  49.         bd.CPUAccessFlags = 0;
  50.         bd.MiscFlags = 0;
  51.  
  52.         D3D10_SUBRESOURCE_DATA initData;
  53.         initData.pSysMem = (*meshIt)->GetVertexPointer();
  54.  
  55.         HR(m_pLevel->GetDevice()->CreateBuffer(&bd, &initData, &buffer));
  56.         m_pVertexBuffers.push_back(buffer);
  57.     }
  58. }
  59.  
  60. void PhysicsMesh::Initialize(ContentManager *pContentManager)
  61. {
  62.     CreateEffect(pContentManager);
  63.  
  64.     ObjPhysicsReader *physRdr = new ObjPhysicsReader(m_filename);
  65.     physRdr->Read();
  66.  
  67.     m_Meshes.assign(physRdr->GetInputMeshBegin(), physRdr->GetInputMeshEnd());
  68.  
  69.     delete physRdr;
  70.  
  71.     DefineInputlayout();
  72.     BuildVertexBuffer();
  73.     BuildIndexBuffer();
  74.     Rotate(D3DXVECTOR3(-1.57079633f,0,0));
  75.  
  76.     if(m_Type == Concave)
  77.         BuildConcave();
  78.     else
  79.         BuildConvex();
  80. }
  81.  
  82. void PhysicsMesh::Draw(const RenderContext* pRenderContext)
  83. {
  84.     // Update Shader matrix variables
  85.     D3DXMATRIX matView = pRenderContext->GetCamera()->GetView();
  86.     D3DXMATRIX matProj = pRenderContext->GetCamera()->GetProj();
  87.     m_pWorldViewProjectionVariable->SetMatrix((float*)&(m_World*matView*matProj));
  88.  
  89.     // Set the input layout
  90.     m_pLevel->GetDevice()->IASetInputLayout(m_pVertexLayout);
  91.  
  92.     for(UINT i = 0; i < m_pVertexBuffers.size(); ++i){
  93.         // Set vertex buffer(s)
  94.         UINT offset = 0;
  95.         m_pLevel->GetDevice()->IASetVertexBuffers( 0, 1, &m_pVertexBuffers.at(i), &m_VertexBufferStride, &offset);
  96.  
  97.         // Set index buffer
  98.         m_pLevel->GetDevice()->IASetIndexBuffer(m_pIndexBuffers.at(i), DXGI_FORMAT_R32_UINT, 0);
  99.  
  100.         // Set primitive topology
  101.         m_pLevel->GetDevice()->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
  102.  
  103.         D3D10_TECHNIQUE_DESC techDesc;
  104.         m_pDefaultTechnique->GetDesc( &techDesc );
  105.         for( UINT p = 0; p < techDesc.Passes; ++p )
  106.         {
  107.             m_pDefaultTechnique->GetPassByIndex(p)->Apply(0);
  108.             m_pLevel->GetDevice()->DrawIndexed(m_NumIndices, 0, 0 );
  109.         }
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement