private void LoadTextures() { //mesh.SetShadowCast(true, true); var lightMode = LightMode.Managed; for (var i = 0; i < mesh.GetGroupCount(); i++) { var textureInfo = TextureFactory.GetTextureInfo(mesh.GetTexture(i)); // Skip if there is no texture. if (textureInfo.Filename.Equals(textureInfo.Name)) { break; } var normalTexture = string.Empty; var normalTextureName = string.Empty; var specularTexture = string.Empty; var specularTextureName = string.Empty; var heightTexture = string.Empty; var heightTextureName = string.Empty; var texture = textureInfo.Filename; var fileInfo = new FileInfo(textureInfo.Filename); normalTextureName = fileInfo.Name.Replace(fileInfo.Extension, Constants.TextureNormalSuffix + fileInfo.Extension); normalTexture = Directory.GetParent(textureInfo.Filename) + @"\" + normalTextureName; heightTextureName = fileInfo.Name.Replace(fileInfo.Extension, Constants.TextureHeightSuffix + fileInfo.Extension); heightTexture = Directory.GetParent(textureInfo.Filename) + @"\" + heightTextureName; specularTextureName = fileInfo.Name.Replace(fileInfo.Extension, Constants.TextureSpecularSuffix + fileInfo.Extension); specularTexture = Directory.GetParent(textureInfo.Filename) + @"\" + specularTextureName; //mesh.SetTextureEx((int)CONST_TV_LAYER.TV_LAYER_BASETEXTURE, Globals.GetTex(textureInfo.Name), i); if (File.Exists(normalTexture)) { var normalId = TextureFactory.LoadTexture(normalTexture, normalTextureName); mesh.SetTextureEx((int)CONST_TV_LAYER.TV_LAYER_NORMALMAP, normalId, i); if (lightMode != LightMode.Offset) { lightMode = LightMode.Normal; } if (File.Exists(specularTexture)) { var alphaId = TextureFactory.LoadTexture(specularTexture); var specularId = TextureFactory.AddAlphaChannel(normalId, alphaId, specularTexture); mesh.SetTextureEx((int)CONST_TV_LAYER.TV_LAYER_SPECULARMAP, specularId, i); } } if (File.Exists(heightTexture)) { var heightId = TextureFactory.LoadTexture(heightTexture); mesh.SetTextureEx((int)CONST_TV_LAYER.TV_LAYER_HEIGHTMAP, heightId, i); lightMode = LightMode.Offset; } } switch (lightMode) { case LightMode.Normal: mesh.SetLightingMode(CONST_TV_LIGHTINGMODE.TV_LIGHTING_BUMPMAPPING_TANGENTSPACE); break; case LightMode.Offset: mesh.SetLightingMode(CONST_TV_LIGHTINGMODE.TV_LIGHTING_OFFSETBUMPMAPPING_TANGENTSPACE); break; case LightMode.Managed: mesh.SetLightingMode(CONST_TV_LIGHTINGMODE.TV_LIGHTING_MANAGED); break; default: mesh.SetLightingMode(CONST_TV_LIGHTINGMODE.TV_LIGHTING_NONE); break; } // Setup material TV_COLOR ambient = new TV_COLOR(0.25f, 0.25f, 0.25f, 1f); TV_COLOR diffuse = new TV_COLOR(1f, 1f, 1f, 1f); TV_COLOR specular = new TV_COLOR(0.35f, 0.35f, 0.35f, 1f); TV_COLOR emissive = new TV_COLOR(1f, 1f, 1f, 1f); float power = 100; materialIdx = MaterialFactory.CreateMaterial(); MaterialFactory.SetAmbient(materialIdx, ambient.r, ambient.g, ambient.b, ambient.a); MaterialFactory.SetDiffuse(materialIdx, diffuse.r, diffuse.g, diffuse.b, diffuse.a); MaterialFactory.SetSpecular(materialIdx, specular.r, specular.g, specular.b, specular.a); MaterialFactory.SetEmissive(materialIdx, emissive.r, emissive.g, emissive.b, emissive.a); MaterialFactory.SetPower(materialIdx, power); mesh.SetMaterial(materialIdx); }