Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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 在运行时在THREE.JS和GLTF中导入另一个纹理_Javascript_Html_Three.js_Gltf - Fatal编程技术网

Javascript 在运行时在THREE.JS和GLTF中导入另一个纹理

Javascript 在运行时在THREE.JS和GLTF中导入另一个纹理,javascript,html,three.js,gltf,Javascript,Html,Three.js,Gltf,我在Three.JS还是个新手,到目前为止,我对自己的进步感到非常高兴,但我需要一些帮助 我有一个GLTF对象加载到场景中,我希望能够通过用户选择样式(如自定义功能)将不同的纹理加载到网站上的对象上 下面是我的代码,目前它没有输出任何内容,我得到以下错误: 铬合金: “TypeError:无法设置未定义的属性“map” 在Firefox中: “TypeError:model.material未定义” 任何帮助都将不胜感激 您遇到的问题是,您指定为模型的场景包含的信息比网格和材质信息多得多。您需要

我在Three.JS还是个新手,到目前为止,我对自己的进步感到非常高兴,但我需要一些帮助

我有一个GLTF对象加载到场景中,我希望能够通过用户选择样式(如自定义功能)将不同的纹理加载到网站上的对象上

下面是我的代码,目前它没有输出任何内容,我得到以下错误:

铬合金:

“TypeError:无法设置未定义的属性“map”

在Firefox中:

“TypeError:model.material未定义”


任何帮助都将不胜感激

您遇到的问题是,您指定为
模型的场景包含的信息比网格和材质信息多得多。您需要迭代场景对象
模型
,以找到网格,然后相应地更改材质。虽然您使用的初始数据格式不同,但您要查找的答案可以在前面的帖子中找到:

编辑:

@Hugotexeira说得对,纹理的赋值需要移动到
loader.load()
的回调函数中(很抱歉,我之前完全忽略了这一点),但实际赋值
model.material.map=texture不起作用。您仍然需要迭代上面提到的
gltf.scene
对象,以找到要为其指定纹理的网格。

函数
loader.load()
异步运行,并且在调用后不会立即设置
model
变量。因此,您正在寻找的解决方案是移动
model.material.map=纹理在回调函数中,如下所示:

loader.load( '../gtf/Box.gltf', function (gltf) {
    model = gltf.scene;
    texture.flipY = false; // for glTF models only
    model.material.map = texture; // <-- move here
    scene.add( model );
});
loader.load('../gtf/Box.gltf',函数(gltf){
model=gltf.scene;
texture.flipY=false;//仅适用于glTF模型

model.material.map=texture;//谢谢@jlcox5,似乎很有意义,刚刚让它工作起来。你知道吗,如果可以将纹理应用到模型的某个部分?那么GLTF来自Blender,我可以将纹理应用到一侧吗?或者我应该使用.obj和.MTL文件并使用对象数组吗?嘿@TheGoldenD0nut指定每个文件可以有多个网格。您应该能够找到要在上述迭代中更改的特定网格,并单独指定新纹理。也就是说,模型的组织方式将取决于其在Blender中的构造,以及创建GLTF文件时使用的导出器。这是很容易打开.gltf文件并在JSON blob中查找“mesh”条目以获得想法。对于大多数格式,都会出现类似的问题。嘿,Hugo,谢谢你。我让它工作起来了,并且非常满意。我发布了一个新问题,下面是链接,如果你对这个问题有任何见解,那将是令人惊讶的。
loader.load( '../gtf/Box.gltf', function (gltf) {
    model = gltf.scene;
    texture.flipY = false; // for glTF models only
    model.material.map = texture; // <-- move here
    scene.add( model );
});