int MeshObj::Create(WCHAR* szfn, ID3D11Device* pd3dDevice, ID3D11DeviceContext* pd3dContext) { Release(); TriangleMesh mesh; MeshObjReader::read(szfn, mesh); int N = mesh.num_vertices(); m_vertices.resize(N); for(int i = 0; i < N; ++i) { m_vertices[i].pos = mesh.vertices_[i]; m_vertices[i].norm = mesh.normals_[i]; } D3D11_BUFFER_DESC bdesc; bdesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; bdesc.ByteWidth = mesh.num_vertices() * sizeof(D3DXVECTOR3) * 2; bdesc.CPUAccessFlags = 0; bdesc.MiscFlags = 0; bdesc.StructureByteStride = sizeof(D3DXVECTOR3) * 2; bdesc.Usage = D3D11_USAGE_DEFAULT; D3D11_SUBRESOURCE_DATA srd; srd.pSysMem = &m_vertices[0]; srd.SysMemPitch = 0; srd.SysMemSlicePitch = 0; pd3dDevice->CreateBuffer(&bdesc, &srd, &m_pVertexBuffer); bdesc.BindFlags = D3D11_BIND_INDEX_BUFFER; bdesc.ByteWidth = mesh.num_triangles() * sizeof(Tuple3ui); bdesc.CPUAccessFlags = 0; bdesc.MiscFlags = 0; bdesc.StructureByteStride = sizeof(unsigned); bdesc.Usage = D3D11_USAGE_DEFAULT; srd.pSysMem = &mesh.triangles_[0]; srd.SysMemPitch = 0; srd.SysMemSlicePitch = 0; pd3dDevice->CreateBuffer(&bdesc, &srd, &m_pIndexBuffer); numVertices = mesh.num_vertices(); numIndices = mesh.num_triangles() * 3; D3DXVECTOR3 bblow, bbhigh; mesh.bounding_box(bblow, bbhigh); m_bbox_center = (bblow + bbhigh) * 0.5f; m_bbox_extent = (bbhigh - bblow) * 0.5f; return 0; }