Одним из способов будет создание пользовательского компонента, который будет:
- ждать, пока модель загрузится
- , пройти через потомков объекта
- , если они имеют свойство материала - примените envMap
. Envmap должен быть CubeTexture - что добавляет еще один уровень сложности, когда вы хотите использовать панораму. Вы можете использовать WebGLRenderTargetCube - это объект, который предоставляет текстуру с камеры-куба, «наблюдающей» за панорамой.
В целом код компонента может выглядеть следующим образом:
// create the 'cubecamera' objct
var targetCube = new THREE.WebGLRenderTargetCube(512, 512);
var renderer = this.el.sceneEl.renderer;
// wait until the model is loaded
this.el.addEventListener("model-loaded", e => {
let mesh = this.el.getObject3D("mesh");
// load the texture
var texture = new THREE.TextureLoader().load( URL,
function() {
// create a cube texture from the panorama
var cubeTex = targetCube.fromEquirectangularTexture(renderer, texture);
mesh.traverse(function(node) {
// if a node has a material attribute - it can have a envMap
if (node.material) {
node.material.envMap = cubeTex.texture;
node.material.envMap.intensity = 3;
node.material.needsUpdate = true;
}
});
}
Проверьте это в этот глюк .