shared_ptr<Surfel> RayTracer::castRay(const Ray& ray,float maxDistance,bool anyHit) const { // Distance from P to X float distance(maxDistance); shared_ptr<Surfel> surfel; if (m_settings.useTree) { // Treat the triTree as a tree surfel = m_triTree.intersectRay(ray, distance, anyHit); } else { // Treat the triTree as an array Tri::Intersector intersector; for (int t = 0; t < m_triTree.size(); ++t) { const Tri& tri = m_triTree[t]; intersector(ray, m_triTree.cpuVertexArray(), tri, anyHit, distance); } surfel = intersector.surfel(); } return surfel; }
shared_ptr<Surfel> RayTracer::castRay(const Point3& X, const Vector3& w, float& distance, bool anyHit) const { // Distance from P to X shared_ptr<Surfel> surfel; const Ray ray(X, w); if (m_settings.useTree) { // Treat the triTree as a tree surfel = m_triTree.intersectRay(ray, distance, anyHit); // if(!isNull(surfel)) { // if(surfel->material->name() == "mirror") { // } // } } else { // Treat the triTree as an array Tri::Intersector intersector; for (int t = 0; t < m_triTree.size(); ++t) { const Tri& tri = m_triTree[t]; intersector(ray, m_triTree.cpuVertexArray(), tri, anyHit, distance); } surfel = intersector.surfel(); } return surfel; }