我不确定答案是否应该非常明显,但它让我望而却步。我正在 Udacity 上使用 three.js 的 3D 图形类(class)。我正处于需要生成 3d 网格的地步。
我已经正确生成了所有顶点,但我仍然无法为它们生成面。我想不出一种明显的方法来自动生成不重叠的面孔。我在网上搜索了又搜索,但找不到有关它的任何信息。我不确定这是否是显而易见的愚蠢或只是没有很好的记录。这是代码:
function PolygonGeometry(sides) {
var geo = new THREE.Geometry();
// generate vertices
for ( var pt = 0 ; pt < sides; pt++ )
{
// Add 90 degrees so we start at +Y axis, rotate counterclockwise around
var angle = (Math.PI/2) + (pt / sides) * 2 * Math.PI;
var x = Math.cos( angle );
var y = Math.sin( angle );
// YOUR CODE HERE
//Save the vertex location - fill in the code
geo.vertices.push( new THREE.Vector3(x, y, 0) );
}
// YOUR CODE HERE
// Write the code to generate minimum number of faces for the polygon.
// Return the geometry object
return geo;
}
我知道最小面数的基本公式是 n-2。但我只是想不出一种没有面孔重叠的方法。 我不想让任何人为我做我的工作,我想尽可能地自己弄清楚。但是有没有人可以指出正确的方向或给我一个公式或其他东西?
最佳答案
您可以自动化三 Angular 测量
对于大的多边形,手动添加面可能是一项相当大的工作。您可以使用 THREE.Shape.Utils
中的 triangulateShape
方法将面添加到网格的过程自动化,如下所示:
var vertices = [your vertices array]
var holes = [];
var triangles, mesh;
var geometry = new THREE.Geometry();
var material = new THREE.MeshBasicMaterial();
geometry.vertices = vertices;
triangles = THREE.Shape.Utils.triangulateShape ( vertices, holes );
for( var i = 0; i < triangles.length; i++ ){
geometry.faces.push( new THREE.Face3( triangles[i][0], triangles[i][1], triangles[i][2] ));
}
mesh = new THREE.Mesh( geometry, material );
vertices
是您的顶点数组,holes
您可以在多边形中定义孔。
注意:请注意,如果您的多边形自相交,则会引发错误。确保您的顶点数组代表一个有效的(非相交的)多边形。
关于javascript - 在 THREE.js 中为顶点生成网格面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15795348/