Я пытаюсь применить различные материалы на передней и задней сторонах экструдированной формы, но не могу определить, куда положить side: THREE.FrontSide
и side: THREE.BackSide
. Где их нужно положить?Различные материалы на задней и торцевой поверхности экструдированной формы
Моей соответствующий код часть:
var materialFront = new THREE.MeshPhongMaterial({ ambient: 0xffffff, map: frontTexture }); var materialSide = new THREE.MeshPhongMaterial({color: 0xE68A00, ambient: 0xffffff}); var extrusionSettings = { amount: 10, bevelEnabled: false, bevelThickness: 0.2, bevelSize: 0.2, bevelSegments: 8, material: 0, extrudeMaterial: 1 }; var geometry = new THREE.ExtrudeGeometry(shapes, extrusionSettings); var materials = [materialFront, materialSide]; var material = new THREE.MeshFaceMaterial(materials); mesh = new THREE.Mesh(geometry, material);
UPDATE: Согласно комментарию WestLangley, я преуспел в добавлении различных текстур для backfaces:
// ... var materials = [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'. Что не работает, точно? – WestLangley
Используя приведенный выше код, когда я смотрю сетку с обратной стороны, здесь также находится 'materialFront'. Я хотел бы добавить другой материал на обратной стороне сетки, например куб кубика в http://stemkoski.github.io/Three.js/Textures.html. –
В источнике three.js есть «материал: // индекс материала для лицевой и задней поверхностей». Это означает, что передняя и задняя стороны не могут иметь разные материалы, потому что они имеют только один индекс. Это ядро проблемы. Я должен иметь возможность использовать один индекс для спины и один индекс для фронта. –