private float?ProcessTriangle(int triangleIndex) { System.Diagnostics.Debug.Assert((int)m_flags != 0); MyTriangle_Vertexes triangle; MyTriangleVertexIndices triangleIndices = m_model.Triangles[triangleIndex]; m_model.GetVertex(triangleIndices.I0, triangleIndices.I2, triangleIndices.I1, out triangle.Vertex0, out triangle.Vertex1, out triangle.Vertex2); Vector3 calculatedTriangleNormal = MyUtils.GetNormalVectorFromTriangle(ref triangle); //We dont want backside intersections if (((int)(m_flags & IntersectionFlags.FLIPPED_TRIANGLES) == 0) && Vector3.Dot(m_line.Direction, calculatedTriangleNormal) > 0) { return(null); } Line lineF = (Line)m_line; float?distance = MyUtils.GetLineTriangleIntersection(ref lineF, ref triangle); // If intersection occured and if distance to intersection is closer to origin than any previous intersection if ((distance != null) && ((m_result == null) || (distance.Value < m_result.Value.Distance))) { // We need to remember original triangleVertexes coordinates (not transformed by world matrix) MyTriangle_BoneWeigths?boneWeights = m_model.GetBoneWeights(triangleIndex); m_result = new MyIntersectionResultLineTriangle(ref triangle, ref boneWeights, ref calculatedTriangleNormal, distance.Value); return(distance.Value); } return(null); }
private float?ProcessTriangle(int triangleIndex) { System.Diagnostics.Debug.Assert((int)m_flags != 0); MyTriangle_Vertexes triangle; MyTriangleVertexIndices triangleIndices = m_model.Triangles[triangleIndex]; m_model.GetVertex(triangleIndices.I0, triangleIndices.I2, triangleIndices.I1, out triangle.Vertex0, out triangle.Vertex1, out triangle.Vertex2); Vector3 calculatedTriangleNormal = MyUtils.GetNormalVectorFromTriangle(ref triangle); //We dont want backside intersections if (((int)(m_flags & IntersectionFlags.FLIPPED_TRIANGLES) == 0) && Vector3.Dot(m_line.Direction, calculatedTriangleNormal) > 0) { return(null); } Line lineF = (Line)m_line; float?distance = MyUtils.GetLineTriangleIntersection(ref lineF, ref triangle); if (distance.HasValue) { MyTriangle_BoneWeigths?boneWeights = m_model.GetBoneWeights(triangleIndex); var result = new MyIntersectionResultLineTriangle(ref triangle, ref boneWeights, ref calculatedTriangleNormal, distance.Value); m_result.Add(result); } return(distance); }