【问题标题】:When I change the texture (same path) it load the first load当我更改纹理(相同路径)时,它会加载第一次加载
【发布时间】:2015-11-25 08:24:10
【问题描述】:

我可以使用不同路径更改对象的纹理图像

 //create textureMaterial
function CreateTextureMaterial(ImageName){
    var Texture = new THREE.ImageUtils.loadTexture('texture/'+ImageName); 
    var Material = new THREE.MeshBasicMaterial({ 
    map:Texture});
    return Material;
}
//change Texture
function ChangeTexture(ObjectName, TextureMaterial){
    obj = view3D.scene.getObjectByName(ObjectName);
    obj.material = TextureMaterial;
    //if render bad(wrong uvmap) use obj.material.materials[number]
}

在我的网站中,用户加载图像并且它始终以相同的路径存储(例如texture/usertexture.jpg),当我从默认值更改时程序会加载图像

ChangeTexture(ObjectName,CreateTextureMaterial(path))

但如果我更改图像(路径始终相同)并调用相同的函数

$('element').load('page.php',ChangeTexture(ObjectName,CreateTextureMaterial(path))

它会加载第一个图像,而不是更新的图像...

我认为它会这样做是因为它被记住在浏览器的某个地方所以...我可以在哪里找到它并将其从内存中删除?

我已经检查了缓存,但它是免费的...

【问题讨论】:

    标签: three.js textures


    【解决方案1】:

    在重新加载纹理之前尝试运行以下代码:

    THREE.Cache.remove(url);
    

    url 是图像的路径。

    还可以尝试将一些随机数据添加到图像 url,例如 ?rand=3123131。这应该可以防止浏览器缓存图像。

    【讨论】:

    • 它不在 THREE.Cache 中......我尝试了 texture/file.png?rand=43242 并且不工作......我可以返回类似 data:image/png 的内容;base64,iVBORw0KG ..... 但我不知道如何将它加载到纹理变量中
    • 你能创建一个解决这个问题的 jsfiddle 吗?
    【解决方案2】:

    在这种情况下,我尝试使用从裁剪器画布(如 https://github.com/fengyuanchen/cropper)捕获的图像更改纹理,并将图像直接用于对象,而不是将其保存在服务器上并使用存储在 var 中的新图像Texture = new THREE.ImageUtils.loadTexture('texture/'+ImageName);

    我直接得到输出数据,放到纹理中

    var texture = new THREE.Texture();
    texture.image = result;
    texture.needsUpdate = true;
    var material = new THREE.MeshBasicMaterial({
    map:texture});
    var obj = scene.getObjectByName('myobject');
    obj.material.materials[0] = material;
    

    其中结果是图像(类似于“data:image/png;base64,iVBORw0KG...”) 如果它不起作用,您可能需要使用方法result.toDataURL的结果

    【讨论】:

    • 当纹理图像的路径相同时防止浏览器缓存的不同解决方案是discussion 中的答案。您可以在将图像 URL 传递给加载器时添加一个随机参数,以使 URL 不同并避免从缓存中加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多