示例#1
0
        private byte[] GetTextureCoordinatesBytes(Rhino.Geometry.Collections.MeshTextureCoordinateList texCoords, out Point2f min, out Point2f max)
        {
            Point2f texCoordsMin = new Point2f()
            {
                X = float.PositiveInfinity, Y = float.PositiveInfinity
            };
            Point2f texCoordsMax = new Point2f()
            {
                X = float.NegativeInfinity, Y = float.NegativeInfinity
            };

            List <float> coordinates = new List <float>(texCoords.Count * 2);

            foreach (Point2f coordinate in texCoords)
            {
                coordinates.AddRange(new float[] { coordinate.X, coordinate.Y });

                texCoordsMin.X = Math.Min(texCoordsMin.X, coordinate.X);
                texCoordsMax.X = Math.Max(texCoordsMax.X, coordinate.X);

                texCoordsMin.Y = Math.Min(texCoordsMin.Y, coordinate.Y);
                texCoordsMax.Y = Math.Max(texCoordsMax.Y, coordinate.Y);
            }

            IEnumerable <byte> bytesEnumerable = coordinates.SelectMany(value => BitConverter.GetBytes(value));

            min = texCoordsMin;
            max = texCoordsMax;

            return(bytesEnumerable.ToArray());
        }
示例#2
0
        glTFLoader.Schema.Buffer CreateTextureCoordinatesBuffer(Rhino.Geometry.Collections.MeshTextureCoordinateList texCoords, out Point2f min, out Point2f max)
        {
            byte[] bytes = GetTextureCoordinatesBytes(texCoords, out min, out max);

            return(new glTFLoader.Schema.Buffer()
            {
                Uri = Constants.TextBufferHeader + Convert.ToBase64String(bytes),
                ByteLength = bytes.Length,
            });
        }