Exemple #1
0
        float GetTimeNormalised(TimeUnit Min, TimeUnit Max, TimeUnit Value)
        {
            var Norm = PopMath.Range(Min.Time, Max.Time, Value.Time);

            //	gr: clip here?
            return(Norm);
        }
Exemple #2
0
    public void     AddBlock(List <Vector3> Positions, List <Color> Colours, Bounds BoundingBox, bool Normalise)
    {
        //	convert into colour data to put into the texture
        var   PositionsAsColour = new List <Color>();
        Color PosColour;

        foreach (var Position in Positions)
        {
            var NormPosition = new Vector3();

            if (Normalise)
            {
                NormPosition.x = PopMath.Range(BoundingBox.min.x, BoundingBox.max.x, Position.x);
                NormPosition.y = PopMath.Range(BoundingBox.min.y, BoundingBox.max.y, Position.y);
                NormPosition.z = PopMath.Range(BoundingBox.min.z, BoundingBox.max.z, Position.z);
            }
            else
            {
                NormPosition = Position;
            }
            PosColour.r = NormPosition.x;
            PosColour.g = NormPosition.y;
            PosColour.b = NormPosition.z;
            PosColour.a = 1;
            PositionsAsColour.Add(PosColour);
        }

        AddBlock(BoundingBox, PositionsAsColour, Colours);
    }
    //	returns 0-1 for each component inside a min/mac
    public static Vector2 Range(this Vector2 Value, Vector2 Min, Vector2 Max)
    {
        var x = PopMath.Range(Min.x, Max.x, Value.x);
        var y = PopMath.Range(Min.y, Max.y, Value.y);

        return(new Vector2(x, y));
    }
    //	returns 0-1 for each component inside a min/mac
    public static Vector3 Range(this Vector3 Value, Vector3 Min, Vector3 Max)
    {
        var x = PopMath.Range(Min.x, Max.x, Value.x);
        var y = PopMath.Range(Min.y, Max.y, Value.y);
        var z = PopMath.Range(Min.z, Max.z, Value.z);

        return(new Vector3(x, y, z));
    }
Exemple #5
0
    float GetLocalHeight(float WorldHeight, float HeightScalar)
    {
        var HalfHeight = GetHeightRange(HeightScalar) / 2.0f;
        var Mid        = GetMidHeight();
        var Top        = Mid - HalfHeight;
        var Bottom     = Mid + HalfHeight;

        return(PopMath.Range(Bottom, Top, WorldHeight));
    }
    //	returns 0-1 for each component inside a min/mac
    public static Vector4 Range(this Vector4 Value, Vector4 Min, Vector4 Max)
    {
        var x = PopMath.Range(Min.x, Max.x, Value.x);
        var y = PopMath.Range(Min.y, Max.y, Value.y);
        var z = PopMath.Range(Min.z, Max.z, Value.z);
        var w = PopMath.Range(Min.w, Max.w, Value.w);

        return(new Vector4(x, y, z, w));
    }
Exemple #7
0
    //	triangle packing!
    public static List <Triangle2> AllocateTriangleAtlases(List <Triangle3> MeshTriangles)
    {
        var TriangleCount = MeshTriangles.Count;
        var AtlasWidth    = (int)Mathf.Ceil(Mathf.Sqrt((float)TriangleCount));
        var AtlasHeight   = AtlasWidth;

        var AtlasTriangles = new List <Triangle2>();

        for (int ti = 0; ti < MeshTriangles.Count; ti++)
        {
            var MeshTriangle = MeshTriangles[ti];

            //	get atlas quad
            var AtlasX    = ti % AtlasWidth;
            var AtlasY    = ti / AtlasWidth;
            var AtlasMinu = PopMath.Range(0, AtlasWidth, AtlasX);
            var AtlasMaxu = PopMath.Range(0, AtlasWidth, AtlasX + 1);
            var AtlasMinv = PopMath.Range(0, AtlasHeight, AtlasY);
            var AtlasMaxv = PopMath.Range(0, AtlasHeight, AtlasY + 1);

            //	todo: get triangle position on it's plane (ie, it's ortho)
            var AtlasTriangle = new Triangle2();
            AtlasTriangle.a = MeshTriangle.a.xz();
            AtlasTriangle.b = MeshTriangle.b.xz();
            AtlasTriangle.c = MeshTriangle.c.xz();

            //	fit triangle to quad
            var AtlasTriangleBounds = new Bounds2();
            AtlasTriangleBounds.Min = PopMath.Min(AtlasTriangle.a, AtlasTriangle.b, AtlasTriangle.c);
            AtlasTriangleBounds.Max = PopMath.Max(AtlasTriangle.a, AtlasTriangle.b, AtlasTriangle.c);
            AtlasTriangle.a         = PopMath.Range(AtlasTriangleBounds.Min, AtlasTriangleBounds.Max, AtlasTriangle.a);
            AtlasTriangle.b         = PopMath.Range(AtlasTriangleBounds.Min, AtlasTriangleBounds.Max, AtlasTriangle.b);
            AtlasTriangle.c         = PopMath.Range(AtlasTriangleBounds.Min, AtlasTriangleBounds.Max, AtlasTriangle.c);

            //	now put it in it's atlas pos
            AtlasTriangle.a.x = Mathf.Lerp(AtlasMinu, AtlasMaxu, AtlasTriangle.a.x);
            AtlasTriangle.a.y = Mathf.Lerp(AtlasMinv, AtlasMaxv, AtlasTriangle.a.y);
            AtlasTriangle.b.x = Mathf.Lerp(AtlasMinu, AtlasMaxu, AtlasTriangle.b.x);
            AtlasTriangle.b.y = Mathf.Lerp(AtlasMinv, AtlasMaxv, AtlasTriangle.b.y);
            AtlasTriangle.c.x = Mathf.Lerp(AtlasMinu, AtlasMaxu, AtlasTriangle.c.x);
            AtlasTriangle.c.y = Mathf.Lerp(AtlasMinv, AtlasMaxv, AtlasTriangle.c.y);

            AtlasTriangles.Add(AtlasTriangle);
        }

        return(AtlasTriangles);
    }
Exemple #8
0
        TimeUnit?PositionToTime(Rect Canvas, Vector2 Position, out float NormalisedY)
        {
            var xf = PopMath.Range(Canvas.xMin, Canvas.xMax, Position.x);
            var yf = PopMath.Range(Canvas.yMin, Canvas.yMax, Position.y);

            NormalisedY = yf;
            if (xf < 0 || xf > 1 || yf < 0 || yf > 1)
            {
                //Debug.Log ("xf = " + xf + " yf = " + yf);
                return(null);
            }

            //	convert to time
            var MinTime = ScrollTimeLeft.Time;
            var MaxTime = ScrollTimeRight.Time;
            var Timef   = Mathf.Lerp(MinTime, MaxTime, xf);
            var TimeMs  = (int)Timef;

            return(new TimeUnit(TimeMs));
        }
Exemple #9
0
        TimeUnit?PositionToTime(Rect Canvas, Vector2 Position, List <DataStreamMeta> Streams, out int?StreamIndex)
        {
            var xf = PopMath.Range(Canvas.xMin, Canvas.xMax, Position.x);
            var yf = PopMath.Range(Canvas.yMin, Canvas.yMax, Position.y);

            if (xf < 0 || xf > 1 || yf < 0 || yf > 1)
            {
                //Debug.Log ("xf = " + xf + " yf = " + yf);
                StreamIndex = null;
                return(null);
            }

            //	convert to time
            var MinTime = ScrollTimeLeft.Time;
            var MaxTime = ScrollTimeRight.Time;
            var Timef   = Mathf.Lerp(MinTime, MaxTime, xf);
            var TimeMs  = (int)Timef;

            //	work out which stream this is
            StreamIndex = GetStreamIndexOnCanvas(yf);

            return(new TimeUnit(TimeMs));
        }
Exemple #10
0
    public static Color NormalToRedGreen(float Normal, Color?OOBColour)
    {
        if (Normal < 0.0f && OOBColour.HasValue)
        {
            return(OOBColour.Value);
        }
        else if (Normal < 0.5f)
        {
            Normal  = Mathf.Max(Normal, 0);
            Normal /= 0.5f;
            return(new Color(1, Normal, 0));
        }
        else if (Normal > 1 && OOBColour.HasValue)
        {
            return(OOBColour.Value);
        }
        else         // >= 0.5f
        {
            Normal = Mathf.Min(Normal, 1);

            float Yellow = PopMath.Range(1.0f, 0.5f, Normal);
            return(new Color(Yellow, 1, 0));
        }
    }