Replace an existing texture using UV Map

Recommended Posts



I'm new to BabylonJS and 3D.


I created a scene in Blender with a character. It has a single material, UV Map and texture.

It works fine in BabylonJS but when I replace the texture with new BABYLON.Texture or new BABYLON.DynamicTexture (in my case), the new texture does not take into account the UV Map.

I think I forgot something, but I don't know where to watch.


(Sorry for my English ^^')

Share this post

Link to post
Share on other sites

You must reload the model after assigning the new textures. I do not think it can be dynamically changed.

How can I do that?

Normally, there is no texture and diffuseTexture is undefined. What I wanted to do is to place a dynamic texture on the model and then I draw the character's face dynamically.


So I do this:

// mesh.material.diffuseTexture is undefined before thatvar skin = new BABYLON.DynamicTexture("Peau", 1024, newScene, true);skin.hasAlpha = true;skin.getContext().fillStyle = '#ff0000';skin.getContext().fillRect(0,0,1024,1024);skin.getContext().drawImage($('img.eye')[0],0,0,120,100,190,690,120,100); // There is an HTML Image Element loadedskin.update(false);mesh.material.diffuseTexture = skin;

But I find myself with the same problem: the texture does not take into account the UV and hasAlpha property changes nothing.

How do I reload the model after applying the dynamic texture?

Share this post

Link to post
Share on other sites
When you do a console.log (), you have diffuseTexture?

You must export your model with a default texture, even if it is transparent so you need to do with blender or 3ds max. diffuseTexture exist and you can modify with Babylon.


I think your problem is here. Babylon when exporting your model, it exports it finds as texture, if there is not, it does not create fields textures.

Share this post

Link to post
Share on other sites

Ok, I found the solution which was very very stupid ... Misuse method parameters ... Normal texture and dynamic texture.

For a normal texture :

// Wrong: mesh.material.diffuseTexture = new BABYLON.Texture("./index.png", scene, true, false);mesh.material.diffuseTexture = new BABYLON.Texture("./index.png", scene);

For a dynamic texture

// Wrong// mesh.material.diffuseTexture = new BABYLON.DynamicTexture("Skin", 1024, scene);// ---// mesh.material.diffuseTexture.update();mesh.material.diffuseTexture = new BABYLON.DynamicTexture("Skin", 1024, scene, true);// ---mesh.material.diffuseTexture.update(true);

I feel really stupid, but thank you very much for your help.

Share this post

Link to post
Share on other sites

Hello @Iwaa-kun I have the same job for replace texture dynamically but on PBR GlTF loader,

This my code: 

var meshes = scene.meshes;
for(var i=0, len=meshes.length; i < len; i++){
     if (meshes.material) {
          meshes.material.albedoTexture = new BABYLON.DynamicTexture('assets/JRO_Copper_02/lambert1_baseColor.jpg', 2048, scene);

It load fine, but the texture is has inversed RGB color, any idea @Pierre Glibert ?

thanks to babylonJS team and everyone for this thread.

Share this post

Link to post
Share on other sites

I have a problem when I load the model gltf a first time and replace a texture it is well replaced but when I want to replace a second it is not taken into.

Could you help me please.

Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.