public abstract RtVector LocalNormalAt(RtPoint point, Intersection hit);
public override RtVector LocalNormalAt(RtPoint point, Intersection hit) { throw new System.NotImplementedException(); }
private void IntersectTrianle(TriangleGeometry triangleGeometry, IntersectionList intersections, Ray ray) { var vertex1 = _vertices[triangleGeometry.Vertex1 - 1]; var vertex2 = _vertices[triangleGeometry.Vertex2 - 1]; var vertex3 = _vertices[triangleGeometry.Vertex3 - 1]; var edge1 = vertex2 - vertex1; var edge2 = vertex3 - vertex1; var directionCrossEdge2 = ray.Direction.Cross(edge2); var determinant = edge1.Dot(directionCrossEdge2); if (Math.Abs(determinant) < DoubleExtensions.EPSILON) { return; } var f = 1.0 / determinant; var point1ToOrigin = ray.Origin - vertex1; var u = f * point1ToOrigin.Dot(directionCrossEdge2); if (u < 0 || u > 1) { return; } var originCrossEdge1 = point1ToOrigin.Cross(edge1); var v = f * ray.Direction.Dot(originCrossEdge1); if (v < 0 || (u + v) > 1) { return; } var t = f * edge2.Dot(originCrossEdge1); Triangle triangle; if (_normals.Count > 0) { var normal1 = _normals[triangleGeometry.Normal1 - 1]; var normal2 = _normals[triangleGeometry.Normal2 - 1]; var normal3 = _normals[triangleGeometry.Normal3 - 1]; triangle = new Triangle(vertex1, vertex2, vertex3, normal1, normal2, normal3); } else { triangle = new Triangle(vertex1, vertex2, vertex3); } triangle.Parent = this; triangle.InheritMaterial = true; var intersection = new Intersection { Shape = triangle, Time = t, U = u, V = v }; intersections.Add(intersection); }
public void Add(Intersection intersection) { _intersections.Add(intersection); _sorted = false; }