我想在THREE.OctahedronGeometry中添加多个材料。这对于长方体对象很有效,但对于THREE.OctahedronGeometry,我只能在所有面上获得第一个材质。如何在每个面上获得不同的材质?
var geometry = new THREE.OctahedronGeometry(1, 0);
var materials = [
new THREE.MeshPhongMaterial( { color: 0x050505, dithering: true } ),
new THREE.MeshPhongMaterial( { color: 0xeeeeee, dithering: true } ),
new THREE.MeshPhongMaterial( { color: 0x060606, dithering: true } ),
new THREE.MeshPhongMaterial( { color: 0xeeeeee, dithering: true } ),
new THREE.MeshPhongMaterial( { color: 0x050505, dithering: true } ),
new THREE.MeshPhongMaterial( { color: 0xeeeeee, dithering: true } ),
new THREE.MeshPhongMaterial( { color: 0x070707, dithering: true } ),
new THREE.MeshPhongMaterial( { color: 0xeeeeee, dithering: true } )
];
var someMesh = new THREE.SceneUtils.createMultiMaterialObject( geometry , materials );
someMesh.castShadow = true; //default is false
someMesh.receiveShadow = true; //default
scene.add( someMesh );发布于 2018-02-12 00:31:48
通过指定组,可以将对多材质的支持添加到任何THREE.BufferGeometry。使用像这样的模式:
var geometry = new THREE.OctahedronBufferGeometry( 5, 0 );
geometry.clearGroups(); // just in case
geometry.addGroup( 0, 3, 0 ); // first 3 vertices use material 0
geometry.addGroup( 3, 3, 1 ); // next 3 vertices use material 1
geometry.addGroup( 6, Infinity, 2 ); // remaining vertices use material 2
var materials = [
new THREE.MeshBasicMaterial( { color: 0xff0000 } ),
new THREE.MeshBasicMaterial( { color: 0x00ff00 } ),
new THREE.MeshBasicMaterial( { color: 0x0000ff } ),
];
var mesh = new THREE.Mesh( geometry, materials );
scene.add( mesh );如果必须使用THREE.Geometry,则可以通过为每个面指定材质索引来添加对多材质的支持。参见three.js updating geometry face materialindex。
如果要做的只是在每个面上使用不同的颜色,则指定面颜色或顶点颜色并使用单个材质渲染整个几何体会更有效。(但这是另一个问题。)
three.js r.89
https://stackoverflow.com/questions/48729579
复制相似问题