THREE.js 球体の各面に独自のテクスチャを与えたいと考えています。そこで、SphereGeometry に頂点を計算させ、面の頂点を使用して各面を PlaneGeometry に変換します。
THREE.SpherePlaneGeometry = function ( v1, v2, v3, v4 ) {
THREE.Geometry.call( this );
var normal = new THREE.Vector3( 0, 1, 0 );
this.vertices.push( v1.clone() );
this.vertices.push( v2.clone() );
this.vertices.push( v3.clone() );
this.vertices.push( v4.clone() );
var face = new THREE.Face4( 0, 1, 2, 3 );
face.normal.copy( normal );
face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone(), normal.clone() );
this.faces.push( face );
var uvs = [
new THREE.UV( 1.0, 0.0 ),
new THREE.UV( 0.0, 0.0 ),
new THREE.UV( 0.0, 1.0 ),
new THREE.UV( 1.0, 1.0 ),
];
this.faceVertexUvs[ 0 ].push( uvs );
};
返されたジオメトリを使用して、これらすべてが後で確実に実行されるようにします。
geometry.computeCentroids();
geometry.computeFaceNormals();
geometry.verticesNeedUpdate = true;
geometry.uvsNeedUpdate = true;
geometry.normalsNeedUpdate = true;
geometry.tangentsNeedUpdate = true;
geometry.elementsNeedUpdate = true;
geometry.dynamic = true;
このテクスチャを適用すると:
私はこの結果を得ました:
赤点と緑点の間の歪みを取り除くにはどうすればよいでしょうか? 極の場合、1 つの頂点が 2 回使用されますが、もっと良い方法があるのではないでしょうか?