void Start() { this.transform = GetComponent <Transform>(); // animation animatingCurve = CubicBezierCurve.CreateIdentity(transform.position, 50, curveMaterial); Debug.Log("CubicBezierCurve Vertices: " + animatingCurve.vertices.Length); Debug.Log("CubicBezierCurve Indices: " + animatingCurve.indices.Length); // circle const float size = 1; float controlPointDis = CubicBezierCurvePoint.CalculateControlPointForCircle(4); var point1 = new CubicBezierCurvePoint(new Vec3(-size, 0, 0), new Vec3(-size, controlPointDis, 0)); var point2 = new CubicBezierCurvePoint(new Vec3(0, size, 0), new Vec3(-controlPointDis, size, 0)); circleCurve1 = new CubicBezierCurve(point1, point2, transform.position, 50, curveMaterial); point1 = new CubicBezierCurvePoint(new Vec3(0, size, 0), new Vec3(controlPointDis, size, 0)); point2 = new CubicBezierCurvePoint(new Vec3(size, 0, 0), new Vec3(size, controlPointDis, 0)); circleCurve2 = new CubicBezierCurve(point1, point2, transform.position, 50, curveMaterial); point1 = new CubicBezierCurvePoint(new Vec3(size, 0, 0), new Vec3(size, -controlPointDis, 0)); point2 = new CubicBezierCurvePoint(new Vec3(0, -size, 0), new Vec3(controlPointDis, -size, 0)); circleCurve3 = new CubicBezierCurve(point1, point2, transform.position, 50, curveMaterial); point1 = new CubicBezierCurvePoint(new Vec3(0, -size, 0), new Vec3(-controlPointDis, -size, 0)); point2 = new CubicBezierCurvePoint(new Vec3(-size, 0, 0), new Vec3(-size, -controlPointDis, 0)); circleCurve4 = new CubicBezierCurve(point1, point2, transform.position, 50, curveMaterial); }
private static void getIdentity(out CubicBezierCurvePoint point1, out CubicBezierCurvePoint point2) { const float size = 1; var cpX = new Vec3(size * .6666f, 0, 0); var pos = new Vec3(-size, 0, 0); point1 = new CubicBezierCurvePoint(pos, pos + cpX); pos = new Vec3(size, 0, 0); point2 = new CubicBezierCurvePoint(pos, pos - cpX); }
public CubicBezierCurve(CubicBezierCurvePoint point1, CubicBezierCurvePoint point2, Vec3 cameraPosition, int density, Material material) { this.point1 = point1; this.point2 = point2; this.density = density; this.material = material; // create mesh int vertexCount = density; int indexCount = density; vertices = new Vec3[vertexCount]; normals = new Vec3[vertexCount]; uvs = new Vec2[vertexCount]; indices = new int[indexCount]; // compute mesh verts and indices float delta = 1.0f / density; for (int i = 0; i != density; ++i) { float u = i / (float)(density - 1); vertices[i] = getPoint(u, cameraPosition, delta, out normals[i]); uvs[i] = new Vec2(u, .5f); indices[i] = i; } // set buffers mesh = new Mesh(); mesh.MarkDynamic(); mesh.vertices = vertices.ToVector3(); mesh.uv = uvs.ToVector2(); mesh.normals = normals.ToVector3(); mesh.SetIndices(indices, MeshTopology.LineStrip, 0); }