123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using BabylonExport.Entities;
- using GLTFExport.Entities;
- namespace Max2Babylon
- {
- partial class BabylonExporter
- {
- private GLTFTextureInfo ExportTexture(BabylonTexture babylonTexture, GLTF gltf)
- {
- if (babylonTexture == null)
- {
- return null;
- }
- RaiseMessage("GLTFExporter.Texture | ExportTexture babylonTexture.name=" + babylonTexture.name, 1);
- // --------------------------
- // -------- Sampler ---------
- // --------------------------
- RaiseMessage("GLTFExporter.Texture | create sampler", 1);
- GLTFSampler gltfSampler = new GLTFSampler();
- gltfSampler.index = gltf.SamplersList.Count;
- gltf.SamplersList.Add(gltfSampler);
- // --- Retreive info from babylon texture ---
- // Mag and min filters
- GLTFSampler.TextureMagFilter? magFilter;
- GLTFSampler.TextureMinFilter? minFilter;
- getSamplingParameters(babylonTexture.samplingMode, out magFilter, out minFilter);
- gltfSampler.magFilter = magFilter;
- gltfSampler.minFilter = minFilter;
- // WrapS and wrapT
- gltfSampler.wrapS = getWrapMode(babylonTexture.wrapU);
- gltfSampler.wrapT = getWrapMode(babylonTexture.wrapV);
-
- // --------------------------
- // --------- Image ----------
- // --------------------------
- RaiseMessage("GLTFExporter.Texture | create image", 1);
- GLTFImage gltfImage = new GLTFImage
- {
- uri = babylonTexture.name
- };
- gltfImage.index = gltf.ImagesList.Count;
- gltf.ImagesList.Add(gltfImage);
- // --------------------------
- // -------- Texture ---------
- // --------------------------
- RaiseMessage("GLTFExporter.Texture | create texture", 1);
- var gltfTexture = new GLTFTexture
- {
- name = babylonTexture.name,
- sampler = gltfSampler.index,
- source = gltfImage.index
- };
- gltfTexture.index = gltf.TexturesList.Count;
- gltf.TexturesList.Add(gltfTexture);
- // --------------------------
- // ------ TextureInfo -------
- // --------------------------
- var gltfTextureInfo = new GLTFTextureInfo
- {
- index = gltfTexture.index
- };
- // TODO - Animations
- //// Copy image to output
- //var absolutePath = texture.Map.FullFilePath;
- //try
- //{
- // if (File.Exists(absolutePath))
- // {
- // if (CopyTexturesToOutput)
- // {
- // RaiseMessage("GLTFExporter.Texture | copy image src path = "+ absolutePath + " and dest path = "+ Path.Combine(gltf.OutputPath, gltfTexture.name));
- // File.Copy(absolutePath, Path.Combine(gltf.OutputPath, gltfTexture.name), true);
- // }
- // }
- // else
- // {
- // RaiseWarning(string.Format("Texture {0} not found.", gltfTexture.name), 2);
- // }
- //}
- //catch
- //{
- // // silently fails
- //}
- return gltfTextureInfo;
- }
- private void getSamplingParameters(BabylonTexture.SamplingMode samplingMode, out GLTFSampler.TextureMagFilter? magFilter, out GLTFSampler.TextureMinFilter? minFilter)
- {
- switch (samplingMode)
- {
- case BabylonTexture.SamplingMode.NEAREST_NEAREST_MIPLINEAR:
- magFilter = GLTFSampler.TextureMagFilter.NEAREST;
- minFilter = GLTFSampler.TextureMinFilter.NEAREST_MIPMAP_LINEAR;
- break;
- case BabylonTexture.SamplingMode.LINEAR_LINEAR_MIPNEAREST:
- magFilter = GLTFSampler.TextureMagFilter.LINEAR;
- minFilter = GLTFSampler.TextureMinFilter.LINEAR_MIPMAP_NEAREST;
- break;
- case BabylonTexture.SamplingMode.LINEAR_LINEAR_MIPLINEAR:
- magFilter = GLTFSampler.TextureMagFilter.LINEAR;
- minFilter = GLTFSampler.TextureMinFilter.LINEAR_MIPMAP_LINEAR;
- break;
- case BabylonTexture.SamplingMode.NEAREST_NEAREST_MIPNEAREST:
- magFilter = GLTFSampler.TextureMagFilter.NEAREST;
- minFilter = GLTFSampler.TextureMinFilter.NEAREST_MIPMAP_NEAREST;
- break;
- case BabylonTexture.SamplingMode.NEAREST_LINEAR_MIPNEAREST:
- magFilter = GLTFSampler.TextureMagFilter.NEAREST;
- minFilter = GLTFSampler.TextureMinFilter.LINEAR_MIPMAP_NEAREST;
- break;
- case BabylonTexture.SamplingMode.NEAREST_LINEAR_MIPLINEAR:
- magFilter = GLTFSampler.TextureMagFilter.NEAREST;
- minFilter = GLTFSampler.TextureMinFilter.LINEAR_MIPMAP_LINEAR;
- break;
- case BabylonTexture.SamplingMode.NEAREST_LINEAR:
- magFilter = GLTFSampler.TextureMagFilter.NEAREST;
- minFilter = GLTFSampler.TextureMinFilter.LINEAR;
- break;
- case BabylonTexture.SamplingMode.NEAREST_NEAREST:
- magFilter = GLTFSampler.TextureMagFilter.NEAREST;
- minFilter = GLTFSampler.TextureMinFilter.NEAREST;
- break;
- case BabylonTexture.SamplingMode.LINEAR_NEAREST_MIPNEAREST:
- magFilter = GLTFSampler.TextureMagFilter.LINEAR;
- minFilter = GLTFSampler.TextureMinFilter.NEAREST_MIPMAP_NEAREST;
- break;
- case BabylonTexture.SamplingMode.LINEAR_NEAREST_MIPLINEAR:
- magFilter = GLTFSampler.TextureMagFilter.LINEAR;
- minFilter = GLTFSampler.TextureMinFilter.NEAREST_MIPMAP_LINEAR;
- break;
- case BabylonTexture.SamplingMode.LINEAR_LINEAR:
- magFilter = GLTFSampler.TextureMagFilter.LINEAR;
- minFilter = GLTFSampler.TextureMinFilter.LINEAR;
- break;
- case BabylonTexture.SamplingMode.LINEAR_NEAREST:
- magFilter = GLTFSampler.TextureMagFilter.LINEAR;
- minFilter = GLTFSampler.TextureMinFilter.NEAREST;
- break;
- default:
- RaiseError("GLTFExporter.Texture | texture sampling mode not found");
- magFilter = null;
- minFilter = null;
- break;
- }
- }
- private GLTFSampler.TextureWrapMode? getWrapMode(BabylonTexture.AddressMode babylonTextureAdresseMode)
- {
- switch (babylonTextureAdresseMode)
- {
- case BabylonTexture.AddressMode.CLAMP_ADDRESSMODE:
- return GLTFSampler.TextureWrapMode.CLAMP_TO_EDGE;
- case BabylonTexture.AddressMode.WRAP_ADDRESSMODE:
- return GLTFSampler.TextureWrapMode.REPEAT;
- case BabylonTexture.AddressMode.MIRROR_ADDRESSMODE:
- return GLTFSampler.TextureWrapMode.MIRRORED_REPEAT;
- default:
- RaiseError("GLTFExporter.Texture | texture wrap mode not found");
- return null;
- }
- }
- }
- }
|