public ArraySegment <byte> GetImageBytes(glTFImage image) { if (string.IsNullOrEmpty(image.uri)) { return(GLTF.GetViewBytes(IO, image.bufferView)); } else { return(IO.Get(image.uri)); } }
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))); }