/// <summary> /// Add the KHR_texture_transform to the glTF file /// </summary> /// <param name="gltf"></param> /// <param name="babylonMaterial"></param> private void AddTextureTransformExtension(ref GLTF gltf, ref GLTFTextureInfo gltfTextureInfo, BabylonTexture babylonTexture) { if (!gltf.extensionsUsed.Contains(KHR_texture_transform)) { gltf.extensionsUsed.Add(KHR_texture_transform); } if (!gltf.extensionsRequired.Contains(KHR_texture_transform)) { gltf.extensionsRequired.Add(KHR_texture_transform); } float angle = babylonTexture.wAng; float angleDirect = -babylonTexture.wAng; KHR_texture_transform textureTransform = new KHR_texture_transform { offset = new float[] { babylonTexture.uOffset, -babylonTexture.vOffset }, rotation = angle, scale = new float[] { babylonTexture.uScale, -babylonTexture.vScale }, texCoord = babylonTexture.coordinatesIndex }; if (gltfTextureInfo.extensions == null) { gltfTextureInfo.extensions = new GLTFExtensions(); } gltfTextureInfo.extensions[KHR_texture_transform] = textureTransform; }
/// <summary> /// Add the KHR_texture_transform to the glTF file /// </summary> /// <param name="gltf"></param> /// <param name="babylonMaterial"></param> private void AddTextureTransformExtension(ref GLTF gltf, ref GLTFTextureInfo gltfTextureInfo, BabylonTexture babylonTexture) { if (gltf.extensionsUsed.Contains(KHR_texture_transform) == false) { gltf.extensionsUsed.Add(KHR_texture_transform); } float angle = babylonTexture.wAng; float angleDirect = -babylonTexture.wAng; KHR_texture_transform textureTransform = new KHR_texture_transform { offset = new float[] { babylonTexture.uOffset, -babylonTexture.vOffset }, rotation = angle, scale = new float[] { babylonTexture.uScale, babylonTexture.vScale }, texCoord = babylonTexture.coordinatesIndex }; textureTransform.offset[1] += 1 - babylonTexture.vScale; // update vOffset according to the vScale textureTransform.offset[0] += (float)(0.5 * (1 - (Math.Cos(angleDirect) - Math.Sin(angleDirect)))); // update uOffset according to the rotation textureTransform.offset[1] += (float)(0.5 * (1 - (Math.Sin(angleDirect) + Math.Cos(angleDirect)))); // update vOffset according to the rotation if (gltfTextureInfo.extensions == null) { gltfTextureInfo.extensions = new GLTFExtensions(); } gltfTextureInfo.extensions[KHR_texture_transform] = textureTransform; }
private string TextureTransformID(GLTFTextureInfo gltfTextureInfo) { if (gltfTextureInfo.extensions == null || !gltfTextureInfo.extensions.ContainsKey(KHR_texture_transform)) { return(""); } else { // Set an id for the texture transform and append to the name KHR_texture_transform textureTransform = gltfTextureInfo.extensions[GLTFExporter.KHR_texture_transform] as KHR_texture_transform; var offsetID = textureTransform.offset[0] + "_" + textureTransform.offset[1]; var rotationID = textureTransform.rotation.ToString(); var scaleID = textureTransform.scale[0] + "_" + textureTransform.scale[1]; var textureTransformID = offsetID + "_" + rotationID + "_" + scaleID; return(textureTransformID); } }