Импортируйте другую текстуру во время выполнения (three.js с форматом .glb) - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь изменить текстуру объекта .glb во время выполнения. Я использую three.js, и он не будет работать.

Как в этом примере это должно работать ... http://necromanthus.com/Test/html5/sims_room.html

Итак, у меня есть этот объект: (экспорт GLB со встроенным изображением) Чистка

Теперь я меняю текстуру, и происходит что-то дикое: Чистка после смены

Понятия не имею, что я могу сделать.

Вот код загрузки объекта .glb:

var shoeFile = 'shoe.glb';
glbLoader.load('3d_models/' + shoeFile, function(geometry) {
  shoeObject = geometry.scene.children[0];
  scene.add(shoeObject);
}, onLoadProgress);

Вот код для изменения текстуры:

var textureLoader = new THREE.TextureLoader();
var remap = textureLoader.load( "3d_models/shoe.png" );

function setAnotherTexture( texture ) {
   scene.children[5].material.map = eval( texture );
}

Мой код неверен или есть хитрость для экспорта другой текстуры в Blender?

Надеюсь, кто-нибудь может мне помочь с этим. Спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Формат glTF использует соглашение о текстуре, отличное от Three.js, и texture.flipY должно быть установлено на false (по умолчанию это true). Для текстур, включенных в модель, GLTFLoader делает это автоматически. При изменении текстуры или добавлении новой текстуры во время выполнения это должно быть сделано в вашем коде JS:

texture.flipY = false;
mesh.material.map = texture;
...