我可以使用
更改具有不同路径的对象的纹理图像 //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))
它加载第一张图片而不是更新的图片......
我认为这样做是因为它在浏览器的某个地方被记忆了......所以我可以找到它并从内存中删除它?
我已经检查了缓存,但它是免费的......
答案 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