javascript - 在 THREE.js 中为顶点生成网格面

标签 javascript three.js

我不确定答案是否应该非常明显,但它让我望而却步。我正在 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/

相关文章:

javascript - 在 Three.js 中,网格的 renderDepth 似乎被忽略

Angular 2 和 Three.js

javascript - 在 three.js 中转换顶点法线

javascript - componentDidMount 中的状态始终为 null,应该有来自任务变量的数据

javascript - 匹配字符串中没有标题大小写的单词 - 正则表达式

javascript - express.js "next()"参数的确切性质

javascript - 链中提取和 Promise.all 的多个 API 调用

javascript - 如何使用 RTCPeerConnection.removeTrack() 删除视频或音频或两者?

javascript - 三.js : Best way to translate the projection?

javascript - Three.js 中的父子关系