Подтвердить что ты не робот

Могу ли я скрыть лица сетки в три раза?

Я хочу сделать части сетки невидимыми во время выполнения. Могу ли я установить эти части невидимыми/прозрачными, например. путем изменения атрибутов отдельных лиц? Сама сетка использует только один материал.


Иллюстративная иллюстрация, поскольку редактор понимает этот вопрос: Представьте себе сетку (здесь с геометрией из 20 вершин), где каждая четверка из четырех вершин создает a Face4. Теперь некоторые части сетки должны быть невидимыми (здесь две грани невидимы).

example

4b9b3361

Ответ 1

Вы можете назначить другой материал для каждого лица. Вот пример, в котором грани имеют материал, но некоторые лица прозрачны:

// geometry
var geometry = new THREE.BoxGeometry( 100, 100, 100, 4, 4, 4 );

// materials
materials = [
    new THREE.MeshLambertMaterial( { color: 0xffff00, side: THREE.DoubleSide } ),
    new THREE.MeshBasicMaterial( { transparent: true, opacity: 0 } )
];

// assign material to each face
for( var i = 0; i < geometry.faces.length; i++ ) {
    geometry.faces[ i ].materialIndex = THREE.Math.randInt( 0, 1 );
}
geometry.sortFacesByMaterialIndex(); // optional, to reduce draw calls

// mesh
mesh = new THREE.Mesh( geometry, materials );
scene.add( mesh );

Обновлен Fiddle, показывающий один способ изменения материала во время выполнения: http://jsfiddle.net/e0x88z7w/

EDIT: MeshFaceMaterial устарел. Сообщение и скрипка обновлены.

three.js r.87