シーンに単純な CricleGeometry があり、その頂点を複製して新しい面を作成し、押し出しをシミュレートしています。新しい面が作成された後、「computeFaceNormals()」を実行しますが、それらの向きは交互になります。すべての面を外側に向けるにはどうすればよいですか?
コードの主要部分は次のとおりです。
//geometry
geometry = new THREE.CircleGeometry(100, 12);
geometry.mergeVertices();
material = new THREE.MeshPhongMaterial( { color: 0xffa800 } );
///////////////////////////////////////////////////////////////
//CREATE NEW FACES
///////////////////////////////////////////////////////////////
var sideGeo = new THREE.Geometry();
//duplicate vertices
for ( var v = 0; v < geometry.vertices.length; v++ ) {
sideGeo.vertices.push( geometry.vertices[ v ].clone() );
sideGeo.vertices.push( geometry.vertices[ v ].clone() );
}
//translate every second vertex on Z by 10
for ( var v = 0; v < sideGeo.vertices.length; v += 2 ) {
sideGeo.vertices[ v ].z += 100;
}
//add them to faces
for ( var v = 0; v < sideGeo.vertices.length -2; v++ ) {
//vertices IDs
var a = v;
var b = v + 1;
var c = v + 2;
//add them to a face
var f = new THREE.Face3(a, b, c);
sideGeo.faces.push(f);
}
//merge with original geo and compute face normals
geometry.merge(sideGeo);
geometry.computeFaceNormals();
//mesh
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);