1

シーンに単純な 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);
4

1 に答える 1

2

を呼び出すとGeometry.computeFaceNormals()、面の法線の方向は、面の頂点の巻き順によって決まります。

three.js では、顔の正面から見て反時計回りに頂点を指定する必要があります。その場合、 によって計算された面の法線computeFaceNormals()はあなたを指します。

three.js r.75

于 2016-04-01T16:02:26.223 に答える