Beispiel #1
0
 public ArraySegment <byte> GetImageBytes(glTFImage image)
 {
     if (string.IsNullOrEmpty(image.uri))
     {
         return(GLTF.GetViewBytes(IO, image.bufferView));
     }
     else
     {
         return(IO.Get(image.uri));
     }
 }
Beispiel #2
0
        public static VrmLib.Image FromGltf(this glTFImage x, Vrm10Storage storage)
        {
            if (x.bufferView == -1)
            {
                // 外部参照?
                throw new Exception();
            }

            var view = storage.Gltf.bufferViews[x.bufferView];

            var buffer = storage.Gltf.buffers[view.buffer];

            // テクスチャの用途を調べる
            var usage = default(VrmLib.ImageUsage);

            foreach (var material in storage.Gltf.materials)
            {
                var colorImage = GetColorImage(storage, material);
                if (colorImage == x)
                {
                    usage |= VrmLib.ImageUsage.Color;
                }

                var normalImage = GetNormalImage(storage, material);
                if (normalImage == x)
                {
                    usage |= VrmLib.ImageUsage.Normal;
                }
            }

            var memory = storage.GetBufferBytes(buffer);

            return(new VrmLib.Image(x.name,
                                    x.mimeType,
                                    usage,
                                    memory.Slice(view.byteOffset, view.byteLength)));
        }