void CUDAMarchingCubesHashSDF::extractIsoSurface(const HashData& hashData, const HashParams& hashParams, const RayCastData& rayCastData, const vec3f& minCorner, const vec3f& maxCorner, bool boxEnabled) { resetMarchingCubesCUDA(m_data); m_params.m_maxCorner = MatrixConversion::toCUDA(maxCorner); m_params.m_minCorner = MatrixConversion::toCUDA(minCorner); m_params.m_boxEnabled = boxEnabled; m_data.updateParams(m_params); extractIsoSurfaceCUDA(hashData, rayCastData, m_params, m_data); copyTrianglesToCPU(); }
bool MeshGeneratorMarchingcube::saveMesh(const string& filename) { if(false==copyTrianglesToCPU()) { cout<<"copy triangles to cpu failed"<<endl; return false; } //create index buffer (required for merging the triangle soup) _meshes.m_FaceIndicesVertices.resize(_meshes.m_Vertices.size()); for (unsigned int i = 0; i < (unsigned int)_meshes.m_Vertices.size() / 3; i++) { _meshes.m_FaceIndicesVertices[i][0] = 3 * i + 0; _meshes.m_FaceIndicesVertices[i][1] = 3 * i + 1; _meshes.m_FaceIndicesVertices[i][2] = 3 * i + 2; } std::cout << "vertices:\t" << _meshes.m_Vertices.size() << std::endl; std::cout << "faces :\t" << _meshes.m_FaceIndicesVertices.size() << std::endl; std::cout << "merging close vertices... "; _meshes.mergeCloseVertices(0.0001f, true); std::cout << "done!" << std::endl; std::cout << "vertices e:\t" << _meshes.m_Vertices.size() << std::endl; std::cout << "faces :\t" << _meshes.m_FaceIndicesVertices.size() << std::endl; std::cout << "removing duplicate faces... "; _meshes.removeDuplicateFaces(); std::cout << "done!" << std::endl; _meshes.computeVertexNormals(); std::cout << "vertices :\t" << _meshes.m_Vertices.size() << std::endl; std::cout << "faces :\t" << _meshes.m_FaceIndicesVertices.size() << std::endl; // m_meshData.applyTransform(transform); std::cout << "saving mesh (" << filename << ") ..."; ml::MeshIOf::saveToFile(filename, _meshes); std::cout << "done!" << std::endl; return 0;//textureMesh(filename); }