挤压形状的背面和正面的不同材料
Posted
技术标签:
【中文标题】挤压形状的背面和正面的不同材料【英文标题】:Different material on back and frontside of extruded shape 【发布时间】:2013-05-05 06:57:46 【问题描述】:我正在尝试在挤压形状的正面和背面应用不同的材料,但不知道在哪里放置 side: THREE.FrontSide
和 side: THREE.BackSide
。应该放在哪里?
我的相关代码部分是:
var materialFront = new THREE.MeshPhongMaterial(环境:0xffffff,地图:frontTexture ); var materialSide = new THREE.MeshPhongMaterial(color: 0xE68A00,ambient: 0xffffff); 变种挤压设置 = 数量:10, bevelEnabled:假, 斜面厚度:0.2, 斜角尺寸:0.2, bevelSegments: 8, 材料:0, 挤出材料:1 ; var geometry = new THREE.ExtrudeGeometry(形状,extrusionSettings); var 材料 = [materialFront, materialSide]; var material = new THREE.MeshFaceMaterial(materials); 网格=新的三。网格(几何,材料);更新: 根据 WestLangley 的评论,我成功地将不同的纹理添加到背面:
// ... var 材料 = [materialFront, materialSide,materialBack]; // ... for ( var face in mesh.geometry.faces ) if (mesh.geometry.faces[ face ].normal.z == 1) mesh.geometry.faces[ face ].materialIndex = 2;【问题讨论】:
THREE.FrontSide
指的是face
的正面,而不是mesh
或shape
的正面。究竟是什么不工作?
使用上面的代码,当我从背面看网格时,materialFront
也在那里。我想在网格的背面添加不同的材料,比如stemkoski.github.io/Three.js/Textures.html 中的骰子。
在three.js 源中有“material: 创建网格几何体后,在第一次调用render()
之前,您必须将背面的materialIndex
更改为2。然后,在材质数组中添加第三个材质。
您可以通过面部法线识别背面。几何体背面的面法线应全部指向同一方向。
three.js r.58
【讨论】:
感谢您的回答!我检查了 f3() 和 f4(),但他们没有给出如何“将背面的 materialIndex 设置为 2”的答案。你能澄清一下吗? 好的。如果你能在这方面帮助我,我会很高兴。到目前为止,我所有的尝试都失败了。 谢谢!我用所需的代码更新了我的问题:***.com/q/16484835/1691517。我会接受这个答案。【参考方案2】:尝试使用:
var materialFront = new THREE.MeshPhongMaterial( ambient: 0xffffff, map: frontTexture, side: THREE.FrontSide );
var materialSide = new THREE.MeshPhongMaterial( color: 0xE68A00, ambient: 0xffffff, side: THREE.BackSide );
即使您可能应该降低环境贡献并为 FrontSide 材料提供color
。
然后:
var materials = [materialFront, materialSide];
scene.add( THREE.SceneUtils.createMultiMaterialObject( geometry, materials ));
【讨论】:
在我的代码中materialSide
附加到extrudeSettings.extrudeMaterial。所以我不能将它用于背面。我看不出你的提议如何运作。以上是关于挤压形状的背面和正面的不同材料的主要内容,如果未能解决你的问题,请参考以下文章