【问题标题】:Dynamically Change Three.js texture in externally loaded Collada file在外部加载的 Collada 文件中动态更改 Three.js 纹理
【发布时间】:2015-11-13 03:02:26
【问题描述】:

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

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

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

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

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

    应该可以解决问题。无需将 DOM 元素以 .png 格式发送到磁盘,只需使用它即可。

    【讨论】:

    • 图像源绑定在 Collada 文件 XML 中。在这种情况下,mesh 还会更新吗?目前它正在说明“未定义网格”。是一种将网格定义为collada文件中定义的纹理的方法吗?
    • 在调用 collada 加载器 load() 之后,一切都存在于基于 JS 的场景图的 .scene 元素中。根据对象的层次结构,您只需要追踪所需的位,然后像任何其他网格一样进行操作。如果您有点棘手,您可以查看.images 引用并尝试在它们被加载之前拦截那里的名称。但这听起来更像是您想要以持续的方式改变事物,而不是中断场景加载,是吗?
    • 这是正确的,非常有帮助。我希望能够在点击时重新包装纹理
    猜你喜欢
    • 2018-09-02
    • 2015-12-04
    • 2013-02-08
    • 2012-10-06
    • 2018-02-26
    • 2015-09-01
    • 2013-06-28
    • 2016-01-03
    • 2012-01-17
    相关资源
    最近更新 更多