Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Threejs,从不同的URL加载mtl文件和纹理_Javascript_Three.js - Fatal编程技术网

Javascript Threejs,从不同的URL加载mtl文件和纹理

Javascript Threejs,从不同的URL加载mtl文件和纹理,javascript,three.js,Javascript,Three.js,所以这个问题听起来可能有点奇怪,让我解释一下。我正在使用robloxapi获取OBJ文件、MTL文件和纹理文件。因此,包含信息的基本api是这https://t2.rbxcdn.com/ef63c826300347dde39b499e56bc874b从中可以得到两个重要的URL,即obj文件https://t4.rbxcdn.com/4844b24bb4b6696ccbafda0c79d2c406和mtl文件https://t1.rbxcdn.com/58f8c8dfcad7ad36d17e17

所以这个问题听起来可能有点奇怪,让我解释一下。我正在使用robloxapi获取OBJ文件、MTL文件和纹理文件。因此,包含信息的基本api是这
https://t2.rbxcdn.com/ef63c826300347dde39b499e56bc874b
从中可以得到两个重要的URL,即obj文件
https://t4.rbxcdn.com/4844b24bb4b6696ccbafda0c79d2c406
和mtl文件
https://t1.rbxcdn.com/58f8c8dfcad7ad36d17e1773a698223e
,问题是MTL文件是从子域
t1
加载的,而纹理是从
加载的https://t0.rbxcdn.com/21e00b04dc20ddc07659af859d4c1eaa
带有子域
t0
。现在这里是它变得棘手的地方:

下面是ThreeJs obj加载程序:

mtlLoader.load('https://t1.rbxcdn.com/58f8c8dfcad7ad36d17e1773a698223e,异步(mtl)=>{
等待mtl.preload();
const objLoader=new THREE.objLoader();
objLoader2.load('https://t4.rbxcdn.com/4844b24bb4b6696ccbafda0c79d2c406',(根)=>{
scene.add(root);
root.children[0]。material.transparent=false
函数init(){
requestAnimationFrame(初始化)
根旋转(0.03)
渲染器。渲染(场景、摄影机);
}
init()
});
等待objLoader2.设置物料(mtl);
});
MTL加载器尝试以
https://t1.rbxcdn.com/21e00b04dc20ddc07659af859d4c1eaa
,但是,正如我上面所述,纹理的子域是
t0
,而不是
t1
,因此如何更改MTL文件和纹理之间的子域

这是完整的html文件


答复
const scene=new THREE.scene();
const-camera=新的三视角摄像机(75,window.innerWidth/window.innerHeight,0.11000);
const renderer=new THREE.WebGLRenderer();
setClearColor(0xffffff,1);
renderer.setSize(window.innerWidth、window.innerHeight);
document.body.appendChild(renderer.doElement);
让我们来看看
const mtlLoader=新的三个.mtlLoader();
const objLoader2=新的三个.OBJLoader();
mtlLoader.load('https://t1.rbxcdn.com/58f8c8dfcad7ad36d17e1773a698223e,异步(mtl)=>{
等待mtl.preload();
const objLoader=new THREE.objLoader();
objLoader2.load('https://t4.rbxcdn.com/4844b24bb4b6696ccbafda0c79d2c406',(根)=>{
scene.add(root);
console.log(根目录)
root.children[0]。material.transparent=false
函数init(){
requestAnimationFrame(初始化)
根旋转(0.03)
渲染器。渲染(场景、摄影机);
}
init()
});
等待objLoader2.设置物料(mtl);
});
常量颜色=0xFFFFFF;
常数强度=0.5;
恒定光=新的三种环境光(颜色、强度);
场景。添加(灯光);
摄像机。位置。设置(0,103,-5)
相机旋转(-180*Math.PI/180)
常量灯光2=新的三点灯光(0xffffff,21000100);
light2.位置设置(0,110,-5);
light2.lookAt(新的3.Vector3(0,103,-5))
场景。添加(light2);

嗨,我解决了这个问题,我将把这个留给其他需要它的人。这是一个非常粗糙的答案。所以我进入MTL装载机发现

loadTexture(url、映射、onLoad、onProgress、onError){
const manager=this.manager!==未定义?this.manager:THREE.DefaultLoadingManager;
让loader=manager.getHandler(url);
如果(加载器===null){
加载器=新的3.TextureLoader(管理器);
}
if(loader.setCrossOrigin)loader.setCrossOrigin(this.crossOrigin);
const texture=loader.load(url、onLoad、onProgress、onError);
if(mapping!==未定义)texture.mapping=映射;
返回纹理;
}
我刚刚添加的“加载纹理”

url=url.replace('t1','t0')