当我更改纹理(相同路径)时,它会加载第一个加载

时间:2015-11-05 13:52:06

标签: three.js textures

我可以使用

更改具有不同路径的对象的纹理图像
 //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))

它加载第一张图片而不是更新的图片......

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

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

2 个答案:

答案 0 :(得分:0)

在重新加载纹理之前,请尝试运行此代码:

THREE.Cache.remove(url);

url是图片的路径。

还尝试将一些随机数据添加到?rand=3123131等图片网址中。这应该可以防止浏览器缓存图像。

答案 1 :(得分:0)

在这种情况下,我尝试使用从裁剪画布(如https://github.com/fengyuanchen/cropper)捕获的图像更改纹理,并将图像直接用于对象,而是将其保存在服务器上并使用存储的新图像whith 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;

结果是图像(类似"数据:image / png; base64,iVBORw0KG ......") 如果它没有工作可能你需要使用方法result.toDataURL

的结果