Programmatisch einfaches UV-Mapping für Modelle erstellen

Kommen vonDie question Ich versuche, UV-Zuordnungen mit Three.js für einige Modelle programmgesteuert zu generieren. Dies ist erforderlich, da meine Modelle auch programmgesteuert generiert werden und ich ihnen eine einfache Textur zuweisen muss. Ich habe gelesenHie und erfolgreich erzeugtes UV-Mapping für einfachen 3D-Text, aber wenn dasselbe Mapping auf komplexere Modelle angewendet wird, funktioniert es einfach nicht.

Die Textur, die ich anwenden möchte, sieht ungefähr so aus:

Der schwarze Hintergrund ist nur im PNG-Bild transparent. Ich muss dies auf meine Modelle anwenden. Es ist nur ein Glitzereffekt, daher ist mir die genaue Position im Modell egal. Kann ich für diese Fälle eine einfache UV-Karte programmgesteuert erstellen?

Ich verwende diesen Code aus der verknüpften Frage, der für planare Modelle gut funktioniert, für nicht planare Modelle jedoch nicht:

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;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage