Graphics 两个网格,相同的纹理,不同的偏移?
使用three.js,我在一个网页上显示一个翻转立方体(又称魔方;参见示例) 在翻转立方体上,通常会有图像分布在立方体的多个部分上。例如,上面显示的船图像分布在四个立方体的面上。在three.js术语中,有多个网格需要为其材质纹理使用相同的图像,但每个网格的偏移量不同 据我所知,在three.js中,不是材质或网格。因此,看起来不能在两个不同位置的不同偏移处使用单个纹理 这是否意味着为了在四个不同的面上显示船只图像的不同部分,我必须创建四个单独的纹理,这意味着我们将船只图像加载到内存中四次?我希望不是这样 下面是一段相关的代码:Graphics 两个网格,相同的纹理,不同的偏移?,graphics,three.js,webgl,textures,Graphics,Three.js,Webgl,Textures,使用three.js,我在一个网页上显示一个翻转立方体(又称魔方;参见示例) 在翻转立方体上,通常会有图像分布在立方体的多个部分上。例如,上面显示的船图像分布在四个立方体的面上。在three.js术语中,有多个网格需要为其材质纹理使用相同的图像,但每个网格的偏移量不同 据我所知,在three.js中,不是材质或网格。因此,看起来不能在两个不同位置的不同偏移处使用单个纹理 这是否意味着为了在四个不同的面上显示船只图像的不同部分,我必须创建四个单独的纹理,这意味着我们将船只图像加载到内存中四次?我
// create an array with the textures
var textureArray = [];
var texNames = ['boat', 'camels', 'elephants', 'hippo',
'natpark', 'ostrich', 'coatofarms-w', 'kenyamap-w', 'nairobi-w'];
texNames.map(function(texName) {
textureArray.push(THREE.ImageUtils.loadTexture(
'images/256/' + texName + '.jpg' ));
});
// Create a material for each texture.
for (var x=0; x <= 1; x++) {
for (var y=0; y <= 1; y++) {
for (var z=0; z <= 1; z++) {
var materialArray = [];
textureArray.map(function(tex) {
// Learned: cannot set this offset for one material,
// without it affecting all materials that use this texture.
tex.offset.x = x * 0.2;
tex.offset.y = y * 0.2;
materialArray.push(new THREE.MeshBasicMaterial( { map: tex }));
});
var cubeMaterial = new THREE.MeshFaceMaterial(materialArray.slice(0, 6));
var cube = new THREE.Mesh( cubeGeom, cubeMaterial );
cube.position.set(x * 50 - 25, y * 50 - 25, z * 50 - 25);
scene.add(cube);
}
}
}
//使用纹理创建一个数组
var textureArray=[];
变量texNames=[“船”、“骆驼”、“大象”、“河马”,
“natpark”、“鸵鸟”、“Coatfarms-w”、“Kenyamp-w”、“内罗毕-w”];
map(函数(texName){
textureArray.push(三个.ImageUtils.loadTexture(
'images/256/'+texName+'.jpg');
});
//为每个纹理创建材质。
对于(var x=0;x您所说的是正确的。与其调整纹理偏移,不如调整几何体的面顶点UV
编辑:还有另一种更符合您需要的解决方案。您可以像这样克隆纹理:
var tex = new THREE.Texture.clone();
克隆纹理将导致重新使用加载的图像,并且新纹理可以有自己的偏移量。但是,在图像加载之前不要尝试克隆纹理
使用这种替代方法,您不必调整UV,也不必多次加载图像
three.js r.58感谢您的输入。这是否意味着不同的立方体不能共享一个立方体几何体,因为不同立方体的+x面上图像的纹理偏移可能不同?您能给出(或链接到)吗如何调整几何体的面顶点UV的示例?@KevinReid:为什么这么说?@LarsH是的,你是对的。立方体将不再能够共享相同的几何体。你赢了一些,你输了一些…今天早些时候,我在three.js issues board上发布了你的问题,关于决定使用纹理的属性ins替代材料。现在它对您没有帮助,但我们将看看它会带来什么…您可能可以通过查看几何数据结构来了解如何自己设置UV。感谢您将其发布在问题板上!我将查找并跟踪该问题。geometry.faceVertexUvs[0][faceIndex][vertex].y=0.5;