【发布时间】:2015-01-16 00:00:43
【问题描述】:
我创建了一个立方体(天空盒),它的每一面都使用了不同的材料。使用MeshFaceMaterial没有问题:
var imagePrefix = "images-nissan/pano_";
var imageDirections = ["xpos", "xneg", "ypos", "yneg", "zpos", "zneg"];
var imageSuffix = ".png";
var skyGeometry = new THREE.BoxGeometry(1, 1, 1);
var materialArray = [];
for (var i = 0; i < 6; i++) {
materialArray.push(new THREE.MeshBasicMaterial({
map: THREE.ImageUtils.loadTexture(imagePrefix + imageDirections[i] + imageSuffix),
side: THREE.BackSide
}));
}
var skyMaterial = new THREE.MeshFaceMaterial(materialArray);
var skyBox = new THREE.Mesh(skyGeometry, skyMaterial);
skyBox.name = "interiorMesh";
scene.add(skyBox);
但是,现在我想在立方体的一个面上添加一种材质,并在立方体的这个面上组合材质。
所以基本上我会在立方体的 5 个面上使用一种材料,在立方体的 1 个面上使用 2 种材料 - 我想用另一个透明 png 覆盖那个“原始”纹理,这样它就只覆盖特定部分原始图像。两张图片的尺寸相同,只有 new 一张是部分透明的。甚至可以用 CubeGeometry 做吗?还是我需要用飞机来做?非常感谢任何帮助!
【问题讨论】:
-
您可以创建一个自定义的 GLSL 着色器,它结合了 2 种颜色 (col1.rgb + (col2.rgb * col1.a)) 或者您可以使用您的平面方法。请注意透明度,尽管它无法按预期工作。
标签: javascript 3d three.js skybox