Пример #1
0
    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);
    }