Исходя из этот вопрос. Я пытаюсь сгенерировать UV-отображения программно с помощью Three.js для некоторых моделей, мне это нужно, потому что мои модели тоже генерируются программно, и мне нужно применить к ним простую текстуру. Я прочитал здесь и успешно сгенерировал UV-отображение для некоторого простого 3D-текста, но при применении такое же сопоставление с более сложными моделями просто не работает.
Текстура, которую я пытаюсь применить, выглядит примерно так:
Черный фон просто прозрачен в изображении PNG. Мне нужно применить это к моим моделям, это просто эффект блеска, поэтому меня не волнует точное положение в модели, есть ли способ программно создать простую УФ-карту для этих случаев?
Я использую этот код из связанного вопроса, который отлично работает для плоских моделей, но не работает для неплоских моделей:
assignUVs = function( geometry ){
geometry.computeBoundingBox();
var max = geometry.boundingBox.max;
var min = geometry.boundingBox.min;
var offset = new THREE.Vector2(0 - min.x, 0 - min.y);
var range = new THREE.Vector2(max.x - min.x, max.y - min.y);
geometry.faceVertexUvs[0] = [];
var faces = geometry.faces;
for (i = 0; i < geometry.faces.length ; i++) {
var v1 = geometry.vertices[faces[i].a];
var v2 = geometry.vertices[faces[i].b];
var v3 = geometry.vertices[faces[i].c];
geometry.faceVertexUvs[0].push([
new THREE.Vector2( ( v1.x + offset.x ) / range.x , ( v1.y + offset.y ) / range.y ),
new THREE.Vector2( ( v2.x + offset.x ) / range.x , ( v2.y + offset.y ) / range.y ),
new THREE.Vector2( ( v3.x + offset.x ) / range.x , ( v3.y + offset.y ) / range.y )
]);
}
geometry.uvsNeedUpdate = true;
}