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 动态更改外部加载的Collada文件中的Three.js纹理_Javascript_Three.js - Fatal编程技术网

Javascript 动态更改外部加载的Collada文件中的Three.js纹理

Javascript 动态更改外部加载的Collada文件中的Three.js纹理,javascript,three.js,Javascript,Three.js,我正在使用three.js collada加载程序导入一个应用了纹理(.png)图像的.dae文件。我需要用新的纹理覆盖.png文件,并使用导出为.png格式的canvas元素创建此纹理。如果清除缓存,它将更改纹理(我将导出的“new”.png纹理命名为与.dae文件中引用的原始.png纹理相同的文件名) 如何确保在用户不清除缓存的情况下识别/渲染新纹理?示例:用户创建一个新纹理,并将其导出到原始纹理上,在用户单击按钮渲染长方体后,collada文件将重新渲染。一旦内存中有Javascript图

我正在使用three.js collada加载程序导入一个应用了纹理(.png)图像的.dae文件。我需要用新的纹理覆盖.png文件,并使用导出为.png格式的canvas元素创建此纹理。如果清除缓存,它将更改纹理(我将导出的“new”.png纹理命名为与.dae文件中引用的原始.png纹理相同的文件名)


如何确保在用户不清除缓存的情况下识别/渲染新纹理?示例:用户创建一个新纹理,并将其导出到原始纹理上,在用户单击按钮渲染长方体后,collada文件将重新渲染。

一旦内存中有Javascript图像对象,无论其来源如何,都可以通过
.Image
属性将其指定给对象的“材质”纹理。您需要让THRE.js知道如何更改绑定。例如,如果您有一个名为
img
的新图像和一个名为
mesh
的具有典型材质的网格:

mesh.material.map.image = img;
mesh.material.map.needsUpdate = true;

我们应该做到这一点。无需将DOM元素以.png格式发送到磁盘,只需使用它。

图像源绑定在Collada文件XML中。在这种情况下网格还会更新吗?目前声明“未定义网格”。这是将网格定义为collada文件中定义的纹理的一种方法吗?调用collada loader load()后,所有内容都位于基于JS的场景图的
.scene
元素中。根据对象的层次结构,您只需跟踪所需的位,然后像其他网格一样进行操作。如果你变得有点棘手,你可以查看
.images
引用,并尝试在加载名称之前拦截它们。但这听起来更像是你想要以一种持续的方式改变事情,而不是打断场景加载,是吗?这是正确的,而且非常有用。我希望能够在单击时重新包装纹理