Vrm10Storage(GltfParser)

This commit is contained in:
ousttrue
2021-03-29 18:25:51 +09:00
parent 8a07b1c4a4
commit d4777e17a4
5 changed files with 25 additions and 56 deletions

View File

@@ -6,11 +6,12 @@ namespace UniGLTF
[Serializable]
public class glTFBuffer
{
IBytesBuffer Storage;
IBytesBuffer m_buffer;
public IBytesBuffer Buffer => m_buffer;
public void OpenStorage(IStorage storage)
{
Storage = new ArraySegmentByteBuffer(storage.Get(uri));
m_buffer = new ArraySegmentByteBuffer(storage.Get(uri));
}
public glTFBuffer()
@@ -20,7 +21,7 @@ namespace UniGLTF
public glTFBuffer(IBytesBuffer storage)
{
Storage = storage;
m_buffer = storage;
}
public string uri;
@@ -39,14 +40,14 @@ namespace UniGLTF
}
public glTFBufferView Append<T>(ArraySegment<T> segment, glBufferTarget target) where T : struct
{
var view = Storage.Extend(segment, target);
byteLength = Storage.Bytes.Count;
var view = m_buffer.Extend(segment, target);
byteLength = m_buffer.Bytes.Count;
return view;
}
public ArraySegment<Byte> GetBytes()
{
return Storage.Bytes;
return m_buffer.Bytes;
}
}

View File

@@ -19,7 +19,6 @@ namespace UniVRM10
AssetGenerator = storage.AssetGenerator,
AssetCopyright = storage.AssetCopyright,
AssetMinVersion = storage.AssetMinVersion,
OriginalJson = storage.OriginalJson,
};
// node

View File

@@ -11,14 +11,10 @@ namespace UniVRM10
{
public class Vrm10Storage
{
public ArraySegment<Byte> OriginalJson { get; private set; }
public UniGLTF.glTF Gltf
{
get;
private set;
}
UniGLTF.GltfParser m_parser;
public UniGLTF.glTF Gltf => m_parser.GLTF;
public readonly List<UniGLTF.IBytesBuffer> Buffers;
public List<UniGLTF.IBytesBuffer> Buffers;
public UniGLTF.Extensions.VRMC_vrm.VRMC_vrm gltfVrm;
@@ -29,9 +25,12 @@ namespace UniVRM10
/// </summary>
public Vrm10Storage()
{
Gltf = new UniGLTF.glTF()
m_parser = new UniGLTF.GltfParser
{
extensionsUsed = new List<string>(),
GLTF = new UniGLTF.glTF()
{
extensionsUsed = new List<string>(),
}
};
Buffers = new List<UniGLTF.IBytesBuffer>()
{
@@ -44,10 +43,9 @@ namespace UniVRM10
/// </summary>
/// <param name="json"></param>
/// <param name="bin"></param>
public Vrm10Storage(ArraySegment<byte> json, ArraySegment<byte> bin)
public Vrm10Storage(UniGLTF.GltfParser parser)
{
OriginalJson = json;
Gltf = UniGLTF.GltfDeserializer.Deserialize(json.ParseAsJson());
m_parser = parser;
if (UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.TryGet(Gltf.extensions,
out UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm))
@@ -63,7 +61,7 @@ namespace UniVRM10
Buffers = new List<UniGLTF.IBytesBuffer>()
{
new UniGLTF.ArraySegmentByteBuffer(bin)
Gltf.buffers[0].Buffer,
};
}

View File

@@ -2,6 +2,7 @@
using System.IO;
using VrmLib;
using UniJSON;
using UniGLTF;
namespace UniVRM10
{
@@ -24,40 +25,12 @@ namespace UniVRM10
public static Model CreateVrmModel(byte[] bytes, FileInfo path)
{
if (!UniGLTF.Glb.TryParse(bytes, out UniGLTF.Glb glb, out Exception ex))
{
throw ex;
}
var json = glb.Json.Bytes.ParseAsJson();
var extensions = json["extensions"];
foreach (var kv in extensions.ObjectItems())
{
switch (kv.Key.GetString())
{
// case "VRM":
// {
// var storage = new Vrm10Storage(glb.Json.Bytes, glb.Binary.Bytes);
// var model = ModelLoader.Load(storage, path.Name);
// model.ConvertCoordinate(Coordinates.Unity);
// return model;
// }
case "VRMC_vrm":
{
var storage = new Vrm10Storage(glb.Json.Bytes, glb.Binary.Bytes);
var model = ModelLoader.Load(storage, path.Name);
model.ConvertCoordinate(Coordinates.Unity);
return model;
}
}
}
// this is error
// throw new NotImplementedException();
return null;
var parser = new GltfParser();
parser.Parse(path.FullName, bytes);
var storage = new Vrm10Storage(parser);
var model = ModelLoader.Load(storage, path.Name);
model.ConvertCoordinate(Coordinates.Unity);
return model;
}
}
}

View File

@@ -18,8 +18,6 @@ namespace VrmLib
Coordinates = coordinates;
}
public ArraySegment<byte> OriginalJson;
public Coordinates Coordinates;
public string AssetVersion = "2.0";