Я пытаюсь установить UV-индексы для каждого лица в BufferGeometry.
Я начинаю с геометрии. Каждая грань моей геометрии имеет face.materialIndex
, соответствующий UV-индексу. Я пытаюсь преобразовать это в BufferGeometry, а затем сопоставить face.materialIndex
с BufferGeometry
.
Вот что у меня есть до сих пор:
// Convert geometry > buffergeometry
const bufGeo = new BufferGeometry().fromGeometry( geometry );
// Get an array of all the original geometry's indices...
const faceIndices = geometry.faces.map( face => face.materialIndex );
// Build a new array with the indices...
const indices = new Uint16Array( faceIndices );
// Apply to the BufferGeometry
bufGeo.setIndex( new BufferAttribute( indices, 1 ) );
Прямо сейчас это, кажется, затирает мою сетку и заставляет ее вообще не рисоваться. Что я делаю не так?
Кстати, под капотом, когда Geometry преобразуется в BufferGeometry, Three.js помещает его в промежуточный формат, сначала называемый DirectGeometry
. Это использовалось для копирования индексов, но оно было удалено по неизвестным причинам. коммит мистера Дуба. Прямо сейчас Three, похоже, полностью отбрасывает индексы при преобразовании Geo > BufGeo.
Я также пытался использовать код из этой фиксации (измененный для использования setIndex):
const indices = new Uint16Array( faceIndices.length * 3 );
bufGeo.addAttribute( 'index', new BufferAttribute( indices, 1 ).copyIndicesArray( faceIndices ) );
Но у меня та же проблема. Полученная сетка затирается.
webgl
к этому вопросу. Ничто в этом вопросе не имеет ничего общего с WebGL. Это полностью вопрос three.js - person gman   schedule 17.07.2017