コード例 #1
0
    public static ModelData CreateModelData(Transform model, List <Vector3> controlPoints, List <RotationPoint> rotationPoints, List <List <Vector3> > detailLoaPoints, int strength)
    {
        ModelData modelData = new ModelData();

        modelData.model = GenerateNode(model);
        //PrintAllNodes(modelData.model, "-");
        foreach (Vector3 point in controlPoints)
        {
            modelData.controlPoints.Add(new Vector()
            {
                x = point.x,
                y = point.y,
                z = point.z
            });
        }
        foreach (List <Vector3> layer in detailLoaPoints)
        {
            // Find closest index
            int index;
            FindClosestIntersect.Search(controlPoints, layer [layer.Count / 2], out index);
            AnimationLayer animationLayer = new AnimationLayer()
            {
                startFrame = Math.Min(strength, index + 1),
                numFrames  = Math.Max(index - strength, 0)
            };
            foreach (Vector3 point in layer)
            {
                animationLayer.layerPoints.Add(new Vector()
                {
                    x = point.x,
                    y = point.y,
                    z = point.z
                });
            }
            modelData.animationLayers.Add(animationLayer);
        }
        if (rotationPoints != null)
        {
            foreach (RotationPoint rotPoint in rotationPoints)
            {
                swellanimations.RotationPoint nrp = new swellanimations.RotationPoint()
                {
                    Rotation = new Vector()
                    {
                        x = rotPoint.rotation.eulerAngles.x,
                        y = rotPoint.rotation.eulerAngles.y,
                        z = rotPoint.rotation.eulerAngles.z
                    }
                };
                nrp.numFrames  = Math.Min(strength, rotPoint.index + 1);
                nrp.startFrame = Math.Max(rotPoint.index - strength, 0);
                modelData.rotationpoints.Add(nrp);
            }
        }

        return(modelData);
    }
コード例 #2
0
    public static ModelData CreateModelData(Transform model, List<Vector3> controlPoints, List<RotationPoint> rotationPoints, List<List<Vector3>> detailLoaPoints, int strength)
    {
        ModelData modelData = new ModelData();
        modelData.model = GenerateNode(model);
        //PrintAllNodes(modelData.model, "-");
        foreach(Vector3 point in controlPoints)
        {
            modelData.controlPoints.Add(new Vector()
            {
                x = point.x,
                y = point.y,
                z = point.z
            });
        }
        foreach(List<Vector3> layer in detailLoaPoints)
        {
            // Find closest index
            int index;
            FindClosestIntersect.Search (controlPoints, layer [layer.Count / 2], out index);
            AnimationLayer animationLayer = new AnimationLayer()
            {
                startFrame = Math.Min(strength, index + 1),
                numFrames = Math.Max(index - strength, 0)
            };
            foreach(Vector3 point in layer)
            {
                animationLayer.layerPoints.Add(new Vector()
                {
                    x = point.x,
                    y = point.y,
                    z = point.z
                });
            }
            modelData.animationLayers.Add (animationLayer);
        }
        if (rotationPoints != null)
        {
            foreach (RotationPoint rotPoint in rotationPoints)
            {
                swellanimations.RotationPoint nrp = new swellanimations.RotationPoint()
                {
                    Rotation = new Vector()
                    {
                        x = rotPoint.rotation.eulerAngles.x,
                        y = rotPoint.rotation.eulerAngles.y,
                        z = rotPoint.rotation.eulerAngles.z
                    }
                };
                nrp.numFrames = Math.Min(strength, rotPoint.index + 1);
                nrp.startFrame = Math.Max(rotPoint.index - strength, 0);
                modelData.rotationpoints.Add(nrp);
            }
        }

        return modelData;
    }
コード例 #3
0
    public static ModelData CreateModelData(
        Transform model, List <Vector3> controlPoints, List <RotationPoint> rotationPoints,
        List <List <Vector3> > detailLoaPoints, int numberOfFrames, int strength)
    {
        ModelData modelData = new ModelData();

        modelData.numberOfFrames = numberOfFrames;
        modelData.model          = GenerateNode(model);
        //PrintAllNodes(modelData.model, "-");
        List <Vector3> interpolatedPoints = new List <Vector3>();

        if (controlPoints.Count > 0)
        {
            // TODO: Implement this in c++ side.
            // TODO: Restore original speed after calculation.
            Vector3 previous = controlPoints[0];
            foreach (Vector3 point in controlPoints)
            {
                float distance = Vector3.Distance(previous, point);
                // Add interpolate points for every step distance.
                float step        = 0.01f;
                int   extraPoints = (int)(distance / step);
                for (int i = 1; i <= extraPoints; i++)
                {
                    Vector3 extra = Vector3.Lerp(
                        previous, point, i / (float)extraPoints);
                    interpolatedPoints.Add(extra);
                    modelData.controlPoints.Add(new Vector()
                    {
                        x = extra.x, y = extra.y, z = extra.z
                    });
                }
                //Debug.Log(distance + " " + extraPoints);
                previous = point;

                // Add the current point.
                interpolatedPoints.Add(point);
                modelData.controlPoints.Add(new Vector()
                {
                    x = point.x, y = point.y, z = point.z
                });
            }
        }
        foreach (List <Vector3> layer in detailLoaPoints)
        {
            // Find closest index
            int index;
            FindClosestIntersect.Search(controlPoints, layer[layer.Count / 2], out index);
            AnimationLayer animationLayer = new AnimationLayer()
            {
                startFrame = Math.Min(strength, index + 1),
                numFrames  = Math.Max(index - strength, 0)
            };
            foreach (Vector3 point in layer)
            {
                animationLayer.layerPoints.Add(new Vector()
                {
                    x = point.x, y = point.y, z = point.z
                });
            }
            modelData.animationLayers.Add(animationLayer);
        }
        if (rotationPoints != null)
        {
            foreach (RotationPoint rotPoint in rotationPoints)
            {
                swellanimations.RotationPoint nrp = new swellanimations.RotationPoint()
                {
                    Rotation = new Vector()
                    {
                        x = rotPoint.rotation.eulerAngles.x,
                        y = rotPoint.rotation.eulerAngles.y,
                        z = rotPoint.rotation.eulerAngles.z
                    }
                };
                //Debug.Log(rotPoint.rotation.eulerAngles.ToString());
                int pointIndex = interpolatedPoints.IndexOf(rotPoint.position);
                int frameIndex = (int)(pointIndex / (float)interpolatedPoints.Count * numberOfFrames);
                nrp.numFrames  = Math.Min(strength, frameIndex + 1);
                nrp.startFrame = Math.Max(frameIndex - strength, 0);
                modelData.rotationpoints.Add(nrp);
            }
        }

        return(modelData);
    }