【发布时间】:2017-08-26 05:29:03
【问题描述】:
我正在创建一个六边形的 ExtrudeGeometry 并尝试为正面和背面设置不同的材料,如 this thread 中所述。
let shape = new THREE.Shape();
/*...*/
let geometry = new THREE.ExtrudeGeometry(shape, {
steps: 2,
amount: 0.05,
bevelEnabled: false,
material: 0, //frontMaterial = green
extrudeMaterial: 1 //sideMaterial = gray
});
//Searching for the back side and setting the marialIndex accordingly
for (let face of geometry.faces) {
if (face.normal.z == 1) {
face.materialIndex = 2; //backMaterial = red
}
}
let mesh = new THREE.Mesh(geometry, new THREE.MultiMaterial([frontMaterial, sideMaterial, backMaterial]));
现在的问题是,这种方法(遍历面部并寻找带有normal.z == 1 的人)不能与extrudeGeometry.amount = 0.05 一起正常工作。 0.1 的值可以正常工作。
是否有另一种方法可以为正面和背面设置不同的材料,还是我做错了?
感谢您的帮助!
【问题讨论】:
-
提示:
AmbientLight不应该像您在小提琴中设置的那样明亮。将强度设置为 0.2 并添加,例如,DirectionalLight到场景 - 或PointLight到相机。或者直接使用MeshBasicMaterial,它不响应灯光。 -
感谢@WestLangley 的提示。在我的真实应用中,我有一个 0.1 的 abientLight、一个 0.5 的 directionalLight 和一个 0.8 的 pointLight,但我真的不是闪电专家 ^^'
标签: javascript three.js