Merge pull request #110 from saturday06/fix-invalid-gltf-value-output

Remove invalid json like `meshes[].primitives[].targets[].TANGENT = -1`
This commit is contained in:
ousttrue 2019-01-09 23:35:13 +09:00 committed by GitHub
commit 7fee636df8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 117 additions and 41 deletions

View File

@ -191,5 +191,81 @@ namespace UniGLTF
Debug.Log(json);
}
[Test]
public void GlTFToJsonTest()
{
var gltf = new glTF();
using (var exporter = new gltfExporter(gltf))
{
exporter.Prepare(CreateSimpleScene());
exporter.Export();
}
var expected = gltf.ToJson().ParseAsJson();
expected.AddKey(Utf8String.From("meshes"));
expected.AddValue(default(ArraySegment<byte>), ValueNodeType.Array);
expected["meshes"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
var mesh = expected["meshes"][0];
mesh.AddKey(Utf8String.From("name"));
mesh.AddValue(Utf8String.From(JsonString.Quote("test")).Bytes, ValueNodeType.String);
mesh.AddKey(Utf8String.From("primitives"));
mesh.AddValue(default(ArraySegment<byte>), ValueNodeType.Array);
mesh["primitives"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
var primitive = mesh["primitives"][0];
primitive.AddKey(Utf8String.From("mode"));
primitive.AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
primitive.AddKey(Utf8String.From("indices"));
primitive.AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
primitive.AddKey(Utf8String.From("material"));
primitive.AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
primitive.AddKey(Utf8String.From("attributes"));
primitive.AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
primitive["attributes"].AddKey(Utf8String.From("POSITION"));
primitive["attributes"].AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
primitive.AddKey(Utf8String.From("targets"));
primitive.AddValue(default(ArraySegment<byte>), ValueNodeType.Array);
primitive["targets"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
primitive["targets"][0].AddKey(Utf8String.From("POSITION"));
primitive["targets"][0].AddValue(Utf8String.From("1").Bytes, ValueNodeType.Integer);
primitive["targets"].AddValue(default(ArraySegment<byte>), ValueNodeType.Object);
primitive["targets"][1].AddKey(Utf8String.From("POSITION"));
primitive["targets"][1].AddValue(Utf8String.From("2").Bytes, ValueNodeType.Integer);
primitive["targets"][1].AddKey(Utf8String.From("TANGENT"));
primitive["targets"][1].AddValue(Utf8String.From("0").Bytes, ValueNodeType.Integer);
gltf.meshes.Add(new glTFMesh("test")
{
primitives = new List<glTFPrimitives>
{
new glTFPrimitives
{
indices = 0,
attributes = new glTFAttributes
{
POSITION = 0,
TANGENT = -1 // should be removed
},
targets = new List<gltfMorphTarget>
{
new gltfMorphTarget
{
POSITION = 1,
TANGENT = -1 // should be removed
},
new gltfMorphTarget
{
POSITION = 2,
TANGENT = 0
}
}
}
}
});
var actual = gltf.ToJson().ParseAsJson();
Assert.AreEqual(expected, actual);
}
}
}

View File

@ -48,7 +48,7 @@ namespace UniGLTF
{
if (KHR_materials_unlit != null)
{
f.KeyValue(() => KHR_materials_unlit);
f.Key("KHR_materials_unlit"); f.GLTFValue(KHR_materials_unlit);
}
}
}

View File

@ -345,23 +345,23 @@ namespace UniGLTF
{
if (extensionsUsed.Count > 0)
{
f.KeyValue(() => extensionsUsed);
f.Key("extensionsUsed"); f.GLTFValue(extensionsUsed);
}
if (extensions.__count > 0)
{
f.KeyValue(() => extensions);
f.Key("extensions"); f.GLTFValue(extensions);
}
if (extras.__count > 0)
{
f.KeyValue(() => extras);
f.Key("extras"); f.GLTFValue(extras);
}
f.KeyValue(() => asset);
f.Key("asset"); f.GLTFValue(asset);
// buffer
if (buffers.Any())
{
f.KeyValue(() => buffers);
f.Key("buffers"); f.GLTFValue(buffers);
}
if (bufferViews.Any())
{
@ -399,21 +399,21 @@ namespace UniGLTF
// meshes
if (meshes.Any())
{
f.KeyValue(() => meshes);
f.Key("meshes"); f.GLTFValue(meshes);
}
if (skins.Any())
{
f.KeyValue(() => skins);
f.Key("skins"); f.GLTFValue(skins);
}
// scene
if (nodes.Any())
{
f.KeyValue(() => nodes);
f.Key("nodes"); f.GLTFValue(nodes);
}
if (scenes.Any())
{
f.KeyValue(() => scenes);
f.Key("scenes"); f.GLTFValue(scenes);
if (scene >= 0)
{
f.KeyValue(() => scene);

View File

@ -122,7 +122,7 @@ namespace UniGLTF
protected override void SerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => sampler);
f.KeyValue(() => target);
f.Key("target"); f.GLTFValue(target);
}
}
@ -175,8 +175,8 @@ namespace UniGLTF
f.KeyValue(() => name);
}
f.KeyValue(() => channels);
f.KeyValue(() => samplers);
f.Key("channels"); f.GLTFValue(channels);
f.Key("samplers"); f.GLTFValue(samplers);
}
public int AddChannelAndGetSampler(int nodeIndex, glTFAnimationTarget.AnimationPropertys property)

View File

@ -169,8 +169,8 @@ namespace UniGLTF
protected override void SerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => count);
f.KeyValue(() => indices);
f.KeyValue(() => values);
f.Key("indices"); f.GLTFValue(indices);
f.Key("values"); f.GLTFValue(values);
}
}
@ -251,7 +251,7 @@ namespace UniGLTF
if (sparse != null && sparse.count > 0)
{
f.KeyValue(() => sparse);
f.Key("sparse"); f.GLTFValue(sparse);
}
f.KeyValue(() => normalized);

View File

@ -128,7 +128,7 @@ namespace UniGLTF
{
if (baseColorTexture != null)
{
f.KeyValue(() => baseColorTexture);
f.Key("baseColorTexture"); f.GLTFValue(baseColorTexture);
}
if (baseColorFactor != null)
{
@ -136,7 +136,7 @@ namespace UniGLTF
}
if (metallicRoughnessTexture != null)
{
f.KeyValue(() => metallicRoughnessTexture);
f.Key("metallicRoughnessTexture"); f.GLTFValue(metallicRoughnessTexture);
}
f.KeyValue(() => metallicFactor);
f.KeyValue(() => roughnessFactor);
@ -206,7 +206,7 @@ namespace UniGLTF
if (extensions != null)
{
f.KeyValue(() => extensions);
f.Key("extensions"); f.GLTFValue(extensions);
}
}

View File

@ -125,11 +125,11 @@ namespace UniGLTF
}
if (extensions.KHR_draco_mesh_compression != null)
{
f.KeyValue(() => extensions);
f.Key("extensions"); f.GLTFValue(extensions);
}
if (extras.targetNames.Count > 0)
{
f.KeyValue(() => extras);
f.Key("extras"); f.GLTFValue(extras);
}
}
}

View File

@ -68,7 +68,7 @@ namespace UniGLTF
if (extras.__count > 0)
{
f.KeyValue(() => extras);
f.Key("extras"); f.GLTFValue(extras);
}
}
}

View File

@ -12,7 +12,7 @@ namespace UniGLTF
[JsonSerializeMembers]
void VRMSerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => VRM);
f.Key("VRM"); f.GLTFValue(VRM);
}
}
}
@ -47,12 +47,12 @@ VRM extension is for 3d humanoid avatars (and models) in VR applications.
protected override void SerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => exporterVersion);
f.KeyValue(() => meta);
f.KeyValue(() => humanoid);
f.KeyValue(() => firstPerson);
f.KeyValue(() => blendShapeMaster);
f.KeyValue(() => secondaryAnimation);
f.KeyValue(() => materialProperties);
f.Key("meta"); f.GLTFValue(meta);
f.Key("humanoid"); f.GLTFValue(humanoid);
f.Key("firstPerson"); f.GLTFValue(firstPerson);
f.Key("blendShapeMaster"); f.GLTFValue(blendShapeMaster);
f.Key("secondaryAnimation"); f.GLTFValue(secondaryAnimation);
f.Key("materialProperties"); f.GLTFValue(materialProperties);
}
}
}

View File

@ -132,8 +132,8 @@ namespace VRM
f.KeyValue(() => name);
f.KeyValue(() => presetName);
f.KeyValue(() => isBinary);
f.KeyValue(() => binds);
f.KeyValue(() => materialValues);
f.Key("binds"); f.GLTFValue(binds);
f.Key("materialValues"); f.GLTFValue(materialValues);
}
}
@ -175,7 +175,7 @@ namespace VRM
protected override void SerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => blendShapeGroups);
f.Key("blendShapeGroups"); f.GLTFValue(blendShapeGroups);
}
}
}

View File

@ -112,13 +112,13 @@ namespace VRM
{
f.KeyValue(() => firstPersonBone);
f.KeyValue(() => firstPersonBoneOffset);
f.KeyValue(() => meshAnnotations);
f.Key("meshAnnotations"); f.GLTFValue(meshAnnotations);
f.KeyValue(() => lookAtTypeName);
f.KeyValue(() => lookAtHorizontalInner);
f.KeyValue(() => lookAtHorizontalOuter);
f.KeyValue(() => lookAtVerticalDown);
f.KeyValue(() => lookAtVerticalUp);
f.Key("lookAtHorizontalInner"); f.GLTFValue(lookAtHorizontalInner);
f.Key("lookAtHorizontalOuter"); f.GLTFValue(lookAtHorizontalOuter);
f.Key("lookAtVerticalDown"); f.GLTFValue(lookAtVerticalDown);
f.Key("lookAtVerticalUp"); f.GLTFValue(lookAtVerticalUp);
}
}
}

View File

@ -246,7 +246,7 @@ namespace VRM
protected override void SerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => humanBones);
f.Key("humanBones"); f.GLTFValue(humanBones);
f.KeyValue(() => armStretch);
f.KeyValue(() => legStretch);
f.KeyValue(() => upperArmTwist);

View File

@ -36,7 +36,7 @@ namespace VRM
protected override void SerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => node);
f.KeyValue(() => colliders);
f.Key("colliders"); f.GLTFValue(colliders);
}
}
@ -95,8 +95,8 @@ namespace VRM
protected override void SerializeMembers(GLTFJsonFormatter f)
{
f.KeyValue(() => boneGroups);
f.KeyValue(() => colliderGroups);
f.Key("boneGroups"); f.GLTFValue(boneGroups);
f.Key("colliderGroups"); f.GLTFValue(colliderGroups);
}
}
}