Esempio n. 1
0
        static glTF_KHR_texture_transform Deserialize(JsonNode json)
        {
            var t = new glTF_KHR_texture_transform();

            if (json.Value.ValueType == ValueNodeType.Object)
            {
                foreach (var kv in json.ObjectItems())
                {
                    var key = kv.Key.GetString();
                    switch (key)
                    {
                    case nameof(offset):
                        t.offset = DeserializeFloat2(kv.Value).ToArray();
                        break;

                    case nameof(rotation):
                        t.rotation = kv.Value.GetSingle();
                        break;

                    case nameof(scale):
                        t.scale = DeserializeFloat2(kv.Value).ToArray();
                        break;

                    case nameof(texCoord):
                        t.texCoord = kv.Value.GetInt32();
                        break;

                    default:
                        throw new NotImplementedException();
                    }
                }
            }

            return(t);
        }
Esempio n. 2
0
        public static bool TryGet(glTFTextureInfo info, out glTF_KHR_texture_transform t)
        {
            if (info != null && info.extensions is glTFExtensionImport imported)
            {
                foreach (var kv in imported.ObjectItems())
                {
                    if (kv.Key.GetUtf8String() == ExtensionNameUt8)
                    {
                        t = Deserialize(kv.Value);
                        return(true);
                    }
                }
            }

            t = default;
            return(false);
        }
Esempio n. 3
0
        public static (Vector2, Vector2) GetTextureOffsetAndScale(glTF_KHR_texture_transform textureTransform)
        {
            var offset = new Vector2(0, 0);
            var scale  = new Vector2(1, 1);

            if (textureTransform != null)
            {
                if (textureTransform.offset != null && textureTransform.offset.Length == 2)
                {
                    offset = new Vector2(textureTransform.offset[0], textureTransform.offset[1]);
                }

                if (textureTransform.scale != null && textureTransform.scale.Length == 2)
                {
                    scale = new Vector2(textureTransform.scale[0], textureTransform.scale[1]);
                }

                // UV Coordinate Conversion: glTF(top-left origin) to Unity(bottom-left origin)
                // Formula: https://github.com/vrm-c/UniVRM/issues/930
                offset.y = 1.0f - offset.y - scale.y;
            }

            return(offset, scale);
        }