当我更改纹理(相同路径)时,它会加载第一个负载
When I change the texture (same path) it load the first load
我可以使用
更改具有不同路径的对象的纹理图像
//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.Cache.remove(url);
其中 url
是图片的路径。
也尝试向图像 url 添加一些随机数据,例如 ?rand=3123131
。这应该可以防止浏览器缓存图像。
在这种情况下,我尝试使用从裁剪器 canvas 捕获的图像更改纹理(如 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
一起使用
我可以使用
更改具有不同路径的对象的纹理图像 //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.Cache.remove(url);
其中 url
是图片的路径。
也尝试向图像 url 添加一些随机数据,例如 ?rand=3123131
。这应该可以防止浏览器缓存图像。
在这种情况下,我尝试使用从裁剪器 canvas 捕获的图像更改纹理(如 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