public void GenerateUnitQuad() { Vector3[] vertices = new Vector3[] { new Vector3( 1, 0, 1), new Vector3( 1, 0, -1), new Vector3(-1, 0, 1), new Vector3(-1, 0, -1), }; Vector2[] uv = new Vector2[] { new Vector2(1, 1), new Vector2(1, 0), new Vector2(0, 1), new Vector2(0, 0), }; int[] triangles = new int[] { 0, 1, 2, 2, 1, 3, }; RenderTriangle tri1 = new RenderTriangle(); tri1.SetPoints(vertices[triangles[0]], vertices[triangles[1]], vertices[triangles[2]]); tri1.SetUV(uv[triangles[0]], uv[triangles[1]], uv[triangles[2]]); RenderTriangle tri2 = new RenderTriangle(); tri2.SetPoints(vertices[triangles[3]], vertices[triangles[4]], vertices[triangles[5]]); tri2.SetUV(uv[triangles[3]], uv[triangles[4]], uv[triangles[5]]); AddTriangle(tri1); AddTriangle(tri2); }
public void GenerateUnitQuad() { Vector3[] vertices = new Vector3[] { new Vector3(1, 0, 1), new Vector3(1, 0, -1), new Vector3(-1, 0, 1), new Vector3(-1, 0, -1), }; Vector2[] uv = new Vector2[] { new Vector2(1, 1), new Vector2(1, 0), new Vector2(0, 1), new Vector2(0, 0), }; int[] triangles = new int[] { 0, 1, 2, 2, 1, 3, }; RenderTriangle tri1 = new RenderTriangle(); tri1.SetPoints(vertices[triangles[0]], vertices[triangles[1]], vertices[triangles[2]]); tri1.SetUV(uv[triangles[0]], uv[triangles[1]], uv[triangles[2]]); RenderTriangle tri2 = new RenderTriangle(); tri2.SetPoints(vertices[triangles[3]], vertices[triangles[4]], vertices[triangles[5]]); tri2.SetUV(uv[triangles[3]], uv[triangles[4]], uv[triangles[5]]); AddTriangle(tri1); AddTriangle(tri2); }
private void Split() { NDPlane plane = new NDPlane(); plane.ComputePlane((mpta + mptb + mptc) / 3, RandomVector3()); List <Vector3> upper = new List <Vector3>(); List <Vector3> lower = new List <Vector3>(); List <Vector3> intersection = new List <Vector3>(); plane.IntersectTriangleHull(mpta, mptb, mptc, upper, lower, intersection); upper.AddRange(intersection); lower.AddRange(intersection); List <int> indices = new List <int>(); // UPPER HULL Triangulator.TriangulateNDSlice(upper, indices); for (int i = 0; i < indices.Count; i += 3) { RenderTriangle tri = new RenderTriangle(); Vector3 pta = upper[indices[i]]; Vector3 ptb = upper[indices[i + 1]]; Vector3 ptc = upper[indices[i + 2]]; Vector2 uva = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref pta); Vector2 uvb = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptb); Vector2 uvc = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptc); tri.SetPoints(pta, ptb, ptc); tri.SetUV(uva, uvb, uvc); splits.Add(tri); } indices.Clear(); // LOWER HULL Triangulator.TriangulateNDSlice(lower, indices); for (int i = 0; i < indices.Count; i += 3) { RenderTriangle tri = new RenderTriangle(); Vector3 pta = lower[indices[i]]; Vector3 ptb = lower[indices[i + 1]]; Vector3 ptc = lower[indices[i + 2]]; Vector2 uva = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref pta); Vector2 uvb = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptb); Vector2 uvc = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptc); tri.SetPoints(pta, ptb, ptc); tri.SetUV(uva, uvb, uvc); splits.Add(tri); } }
private void Split() { NDPlane plane = new NDPlane(); plane.ComputePlane((mpta + mptb + mptc) / 3, RandomVector3()); List<Vector3> upper = new List<Vector3>(); List<Vector3> lower = new List<Vector3>(); List<Vector3> intersection = new List<Vector3>(); plane.IntersectTriangleHull(mpta, mptb, mptc, upper, lower, intersection); upper.AddRange(intersection); lower.AddRange(intersection); List<int> indices = new List<int>(); // UPPER HULL Triangulator.TriangulateNDSlice(upper, indices); for (int i = 0; i < indices.Count; i += 3) { RenderTriangle tri = new RenderTriangle(); Vector3 pta = upper[indices[i]]; Vector3 ptb = upper[indices[i+1]]; Vector3 ptc = upper[indices[i+2]]; Vector2 uva = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref pta); Vector2 uvb = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptb); Vector2 uvc = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptc); tri.SetPoints(pta, ptb, ptc); tri.SetUV(uva, uvb, uvc); splits.Add(tri); } indices.Clear(); // LOWER HULL Triangulator.TriangulateNDSlice(lower, indices); for (int i = 0; i < indices.Count; i += 3) { RenderTriangle tri = new RenderTriangle(); Vector3 pta = lower[indices[i]]; Vector3 ptb = lower[indices[i + 1]]; Vector3 ptc = lower[indices[i + 2]]; Vector2 uva = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref pta); Vector2 uvb = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptb); Vector2 uvc = Triangulator.GenerateUVCoords(ref mpta, ref mptb, ref mptc, ref muva, ref muvb, ref muvc, ref ptc); tri.SetPoints(pta, ptb, ptc); tri.SetUV(uva, uvb, uvc); splits.Add(tri); } }