Javascript 动态更改外部加载的Collada文件中的Three.js纹理
我正在使用three.js collada加载程序导入一个应用了纹理(.png)图像的.dae文件。我需要用新的纹理覆盖.png文件,并使用导出为.png格式的canvas元素创建此纹理。如果清除缓存,它将更改纹理(我将导出的“new”.png纹理命名为与.dae文件中引用的原始.png纹理相同的文件名)Javascript 动态更改外部加载的Collada文件中的Three.js纹理,javascript,three.js,Javascript,Three.js,我正在使用three.js collada加载程序导入一个应用了纹理(.png)图像的.dae文件。我需要用新的纹理覆盖.png文件,并使用导出为.png格式的canvas元素创建此纹理。如果清除缓存,它将更改纹理(我将导出的“new”.png纹理命名为与.dae文件中引用的原始.png纹理相同的文件名) 如何确保在用户不清除缓存的情况下识别/渲染新纹理?示例:用户创建一个新纹理,并将其导出到原始纹理上,在用户单击按钮渲染长方体后,collada文件将重新渲染。一旦内存中有Javascript图
如何确保在用户不清除缓存的情况下识别/渲染新纹理?示例:用户创建一个新纹理,并将其导出到原始纹理上,在用户单击按钮渲染长方体后,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
引用,并尝试在加载名称之前拦截它们。但这听起来更像是你想要以一种持续的方式改变事情,而不是打断场景加载,是吗?这是正确的,而且非常有用。我希望能够在单击时重新包装纹理