public GraphicsTriangle(Triangle triangle) { Points = new GraphicsVector3[3]; TexturePoints = new TextureVector[3]; for (int i = 0; i < 3; ++i) { Points[i] = new GraphicsVector3(triangle.Points[i]); TexturePoints[i] = new TextureVector(); } Normal = triangle.Normal; Color = triangle.Color; }
public GraphicsTriangle(GraphicsVector3 point1, GraphicsVector3 point2, GraphicsVector3 point3, TextureVector texturePoint1, TextureVector texturePoint2, TextureVector texturePoint3, Vector3 normal, Color color) { Points = new GraphicsVector3[3]; Points[0] = point1; Points[1] = point2; Points[2] = point3; TexturePoints = new TextureVector[3]; TexturePoints[0] = texturePoint1; TexturePoints[1] = texturePoint2; TexturePoints[2] = texturePoint3; Normal = normal; Color = color; }
public GraphicsTriangle Copy() { GraphicsVector3[] newPoints = new GraphicsVector3[3]; TextureVector[] newTexturePoints = new TextureVector[3]; for (int i = 0; i < 3; ++i) { newPoints[i] = new GraphicsVector3(Points[i]); newTexturePoints[i] = new TextureVector(TexturePoints[i]); } return(new GraphicsTriangle(newPoints, newTexturePoints, Normal, Color)); }
private TextureVector clipTextureVector(TextureVector insidePoint, TextureVector outsidePoint, float t) { return(new TextureVector(t * (outsidePoint.U - insidePoint.U) + insidePoint.U, t * (outsidePoint.V - insidePoint.V) + insidePoint.V, t * (outsidePoint.W - insidePoint.W) + insidePoint.W)); }
private GraphicsTriangle[] ClipTriangleAgainstPlane(Vector3 planePosition, Vector3 planeNormal, GraphicsTriangle triangle) { planeNormal = Vector3.Normalize(planeNormal); List <GraphicsVector3> insidePoints = new List <GraphicsVector3>(); List <GraphicsVector3> outsidePoints = new List <GraphicsVector3>(); List <TextureVector> insideTexturePoints = new List <TextureVector>(); List <TextureVector> outsideTexturePoints = new List <TextureVector>(); float[] distances = new float[3]; for (int i = 0; i < 3; ++i) { distances[i] = GetShortestDistanceToPlane(triangle.Points[i], planePosition, planeNormal); } for (int i = 0; i < 3; ++i) { if (distances[i] >= 0) { insidePoints.Add(triangle.Points[i]); insideTexturePoints.Add(triangle.TexturePoints[i]); } else { outsidePoints.Add(triangle.Points[i]); outsideTexturePoints.Add(triangle.TexturePoints[i]); } } if (insidePoints.Count == 0) { return(new GraphicsTriangle[] { }); } if (insidePoints.Count == 3) { return(new GraphicsTriangle[] { triangle }); } if (insidePoints.Count == 1 && outsidePoints.Count == 2) { GraphicsVector3 p1 = insidePoints[0]; TextureVector tp1 = insideTexturePoints[0]; float t; GraphicsVector3 p2 = LinePlaneIntersection(planePosition, planeNormal, p1, outsidePoints[0], out t); TextureVector tp2 = clipTextureVector(insideTexturePoints[0], outsideTexturePoints[0], t); GraphicsVector3 p3 = LinePlaneIntersection(planePosition, planeNormal, p1, outsidePoints[1], out t); TextureVector tp3 = clipTextureVector(insideTexturePoints[0], outsideTexturePoints[1], t); return(new GraphicsTriangle[] { new GraphicsTriangle(p1, p2, p3, tp1, tp2, tp3, triangle.Normal, triangle.Color) }); } if (insidePoints.Count == 2 && outsidePoints.Count == 1) { float t; GraphicsVector3 t1p1 = insidePoints[0]; GraphicsVector3 t1p2 = insidePoints[1]; GraphicsVector3 t1p3 = LinePlaneIntersection(planePosition, planeNormal, t1p1, outsidePoints[0], out t); TextureVector t1tp1 = insideTexturePoints[0]; TextureVector t1tp2 = insideTexturePoints[1]; TextureVector t1tp3 = clipTextureVector(t1tp1, outsideTexturePoints[0], t); GraphicsVector3 t2p1 = insidePoints[1]; GraphicsVector3 t2p2 = t1p3; GraphicsVector3 t2p3 = LinePlaneIntersection(planePosition, planeNormal, t2p1, outsidePoints[0], out t); TextureVector t2tp1 = insideTexturePoints[1]; TextureVector t2tp2 = t1tp3; TextureVector t2tp3 = clipTextureVector(t2tp1, outsideTexturePoints[0], t); return(new GraphicsTriangle[] { new GraphicsTriangle(t1p1, t1p3, t1p2, t1tp1, t1tp2, t1tp3, triangle.Normal, triangle.Color), new GraphicsTriangle(t2p1, t2p2, t2p3, t2tp1, t2tp2, t2tp3, triangle.Normal, triangle.Color) }); } return(null); //To satisfy the compliers :( }
public TextureVector(TextureVector original) { U = original.U; V = original.V; W = original.W; }