2016-08-25 1 views
0

У меня есть прецедент, в котором пользователи могут указывать текстуру, которая затем должна быть сопоставлена ​​с объектом через несколько лиц. Поэтому, к сожалению, я не могу использовать стандартное UV-сопоставление, например, с Blender, и поэтому хочу написать свой собственный файл UVGenerator для создания моей собственной проекции. Итак, я ищу подробную информацию, как это сделать.Пользовательский UVGenerator - howto?

Я знаю, что THREE.ExtrudeGeometry.WorldUVGenerator может служить примером, который расположен в src/extras/geometries/ExtrudeGeometry.js

В там я нашел два метода, где я не знаю, как работать вместе. Первый - generateTopUV, который в основном принимает 3 вершины в качестве параметров и ожидает, что я верну три пары значений u/v. Так что это довольно прямолинейно, что делает этот метод.

generateTopUV: function (geometry, indexA, indexB, indexC) 

Второй является странным для меня, так как она занимает четыре вершины, и я удивляюсь, почему, а также имя не помогает мне. Надежда sb может пролить свет на это.

код Это для WorldUVGenerator это:

generateSideWallUV: function (geometry, indexA, indexB, indexC, indexD) { 
    var vertices = geometry.vertices; 

    var a = vertices[ indexA ]; 
    var b = vertices[ indexB ]; 
    var c = vertices[ indexC ]; 
    var d = vertices[ indexD ]; 

    if (Math.abs(a.y - b.y) < 0.01) { 

     return [ 
      new THREE.Vector2(a.x, 1 - a.z), 
      new THREE.Vector2(b.x, 1 - b.z), 
      new THREE.Vector2(c.x, 1 - c.z), 
      new THREE.Vector2(d.x, 1 - d.z) 
     ]; 

    } else { 

     return [ 
      new THREE.Vector2(a.y, 1 - a.z), 
      new THREE.Vector2(b.y, 1 - b.z), 
      new THREE.Vector2(c.y, 1 - c.z), 
      new THREE.Vector2(d.y, 1 - d.z) 
     ]; 

    } 

} 

Приветствие Том

ответ

0

В конце концов я решил это просто устанавливающее geometry.faceVertexUvs с массивом массивов, где внутренний массив содержит 3 Vector2-х, которые дают значения uv.

Работы красиво :-) и не нужно обрабатывать 4 вершины