bool CMesh::RayCast(VECTOR4D &RayOrigin, VECTOR4D &RayDir, multimap<float, INTERSECTIONINFO>& Faces) { unsigned long nFaces = (unsigned long)m_Indices.size() / 3; unsigned long nBaseIndex = 0; unsigned long nIntersectedFaces = 0; for (unsigned long iFace = 0; iFace < nFaces; iFace++) { VECTOR4D &V0 = m_Vertices[m_Indices[nBaseIndex + 0]].Position; VECTOR4D &V1 = m_Vertices[m_Indices[nBaseIndex + 1]].Position; VECTOR4D &V2 = m_Vertices[m_Indices[nBaseIndex + 2]].Position; VECTOR4D Intersection; if (RayCastOnTriangle(V0, V1, V2, RayOrigin, RayDir, Intersection)) { float dist = Magnity(Intersection - RayOrigin); INTERSECTIONINFO II; II.Face = iFace; II.LocalPosition = Intersection; Faces.insert(make_pair(dist, II)); nIntersectedFaces++; } nBaseIndex += 3; } return nIntersectedFaces > 0; }
bool CMesh::RayCast(VECTOR4D &RayOrigin, VECTOR4D &RayDir, multimap<float, INTERSECTIONINFO> &Faces) { unsigned long nFaces = m_Indexes.size() / 3; unsigned long nBaseIndex = 0; unsigned long nIntersectedFaces = 0; for (unsigned long iFace = 0; iFace < nFaces; ++iFace, nBaseIndex+=3) { VECTOR4D &V0 = m_Vertexes[m_Indexes[nBaseIndex]].Position; VECTOR4D &V1 = m_Vertexes[m_Indexes[nBaseIndex + 1]].Position; VECTOR4D &V2 = m_Vertexes[m_Indexes[nBaseIndex + 2]].Position; VECTOR4D Intersection; if (RayCastOnTriangle(V0, V1, V2, RayOrigin, RayDir, Intersection)) { // Distancia entre el origen y esa interseccion float dist = Magnity(Intersection - RayOrigin); INTERSECTIONINFO II; II.Face = iFace; II.LocalPosition = Intersection; Faces.insert(make_pair(dist, II)); ++nIntersectedFaces; } } return nIntersectedFaces != 0; }