为什么我在Three.js中用arc()画不出一个完整的圆?

Why can't I draw a complete circle with arc() in Three.js?

我正在尝试使用拉伸弧在 Three.js 中绘制一个复杂的形状,但它们似乎表现不正常。不知道我是不是没看懂API,但这不应该创建一个以原点为中心的半径为100的完整拉伸圆吗?

var path = new THREE.Path();

path.moveTo(0, 0);
path.arc(0, 0, 100, 0, Math.PI * 2, false);

var shape = path.toShapes(false, false);

var extrudeSettings = {
    amount : 20,
    steps : 1
};

var geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);

var mesh = new THREE.Mesh(geometry, material);

相反,它绘制了一个 Pacman 形状:

这是 JSFiddle:

http://jsfiddle.net/c8shqzpn/

如果将Math.PI乘以2.1而不是2,是否可以解决?

您想创建一个圆形,以便将其挤出。

无论何时绘制圆弧,它都会将圆弧的起点连接到当前点,因此在您的情况下,您必须使用 moveTo() 命令将起点设置在圆的周长上.

var shape = new THREE.Shape();

shape.moveTo( circleRadius, 0 );
shape.absarc( 0, 0, circleRadius, 0, 2 * Math.PI, false );

three.js r.70

我在绘制 3/4 的圆并将其拉伸并将结果 (THREE.Mesh) 添加到屏幕时遇到了类似的问题。圆圈似乎漏掉了一段。添加 moveTo( x, y ) where x, y are coordinates of the beginning of arc 解决了这个问题。我使用了这段代码:

var extrudeSettings = {
    bevelEnabled: false,
    steps: 1,
    amount: 2
};

var shape = new THREE.Shape();
var circleRadius = 4;

// THIS LINE SOLVES THE ISSUE 
shape.moveTo( 0, -circleRadius );

shape.absarc( 0, 0, circleRadius, 0, 1.5 * Math.PI, false );
shape.lineTo( 0, 0 );
shape.closePath();

var geometry = shape.extrude( extrudeSettings );

scene.add( new THREE.Mesh( geometry, new THREE.MeshNormalMaterial() ) );

首先我的网格看起来像这样:

添加 shape.moveTo( 0, -circleRadius ); 后网格看起来像这样: