예제 #1
0
        public static void SetSampler(Texture2D texture, glTFTextureSampler sampler)
        {
            if (texture == null)
            {
                return;
            }

            foreach (var kv in GetUnityWrapMode(sampler))
            {
                switch (kv.Key)
                {
                case TextureWrapType.All:
                    texture.wrapMode = kv.Value;
                    break;

#if UNITY_2017_1_OR_NEWER
                case TextureWrapType.U:
                    texture.wrapModeU = kv.Value;
                    break;

                case TextureWrapType.V:
                    texture.wrapModeV = kv.Value;
                    break;

                case TextureWrapType.W:
                    texture.wrapModeW = kv.Value;
                    break;
#endif

                default:
                    throw new NotImplementedException();
                }
            }

            texture.filterMode = ImportFilterMode(sampler.minFilter);
        }
예제 #2
0
        public static IEnumerable <KeyValuePair <TextureWrapType, TextureWrapMode> > GetUnityWrapMode(glTFTextureSampler sampler)
        {
#if UNITY_2017_1_OR_NEWER
            if (sampler.wrapS == sampler.wrapT)
            {
                switch (sampler.wrapS)
                {
                case glWrap.NONE:     // default
                    yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat));

                    break;

                case glWrap.CLAMP_TO_EDGE:
                    yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Clamp));

                    break;

                case glWrap.REPEAT:
                    yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat));

                    break;

                case glWrap.MIRRORED_REPEAT:
                    yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Mirror));

                    break;

                default:
                    throw new NotImplementedException();
                }
            }
            else
            {
                switch (sampler.wrapS)
                {
                case glWrap.NONE:     // default
                    yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Repeat));

                    break;

                case glWrap.CLAMP_TO_EDGE:
                    yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Clamp));

                    break;

                case glWrap.REPEAT:
                    yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Repeat));

                    break;

                case glWrap.MIRRORED_REPEAT:
                    yield return(TypeWithMode(TextureWrapType.U, TextureWrapMode.Mirror));

                    break;

                default:
                    throw new NotImplementedException();
                }
                switch (sampler.wrapT)
                {
                case glWrap.NONE:     // default
                    yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Repeat));

                    break;

                case glWrap.CLAMP_TO_EDGE:
                    yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Clamp));

                    break;

                case glWrap.REPEAT:
                    yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Repeat));

                    break;

                case glWrap.MIRRORED_REPEAT:
                    yield return(TypeWithMode(TextureWrapType.V, TextureWrapMode.Mirror));

                    break;

                default:
                    throw new NotImplementedException();
                }
#else
            // Unity2017.1より前
            // * wrapSとwrapTの区別が無くてwrapしかない
            // * Mirrorが無い

            switch (sampler.wrapS)
            {
            case glWrap.NONE:     // default
                yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat));

                break;

            case glWrap.CLAMP_TO_EDGE:
            case glWrap.MIRRORED_REPEAT:
                yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Clamp));

                break;

            case glWrap.REPEAT:
                yield return(TypeWithMode(TextureWrapType.All, TextureWrapMode.Repeat));

                break;

            default:
                throw new NotImplementedException();
#endif
            }
        }