如何在Three.js中构建一个空心圆柱体

6

我在Three.js中构建空心圆柱时遇到了困难。

我应该使用CSG构建它还是通过将顶点缝合在一起构建它?


我有同样的问题,只是措辞不同。 http://stackoverflow.com/questions/11638686/straight-tube-using-tubegeometry - Recur
4个回答

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

var arcShape = new THREE.Shape();
arcShape.absarc(0, 0, 1, 0, Math.PI * 2, 0, false);

var holePath = new THREE.Path();
holePath.absarc(0, 0, 0.8, 0, Math.PI * 2, true);
arcShape.holes.push(holePath);

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

7
这个解决方案使用了ChandlerPrall的ThreeCSG.js项目:http://github.com/chandlerprall/ThreeCSG (目前,我建议使用支持材料的实验版本 - uv分支 - http://github.com/chandlerprall/ThreeCSG/tree/uvs
以下是所需代码:
// Cylinder constructor parameters:  
// radiusAtTop, radiusAtBottom, height, segmentsAroundRadius, segmentsAlongHeight

var smallCylinderGeom = new THREE.CylinderGeometry( 30, 30, 80, 20, 4 );
var largeCylinderGeom = new THREE.CylinderGeometry( 40, 40, 80, 20, 4 );

var smallCylinderBSP = new ThreeBSP(smallCylinderGeom);
var largeCylinderBSP = new ThreeBSP(largeCylinderGeom);
var intersectionBSP = largeCylinderBSP.subtract(smallCylinderBSP);      

var redMaterial = new THREE.MeshLambertMaterial( { color: 0xff0000 } );
var hollowCylinder = intersectionBSP.toMesh( redMaterial );
scene.add( hollowCylinder );

3

不太可能需要将顶点拼接在一起。如果您的圆柱体没有厚度,可以使用THREE.CylinderGeometry()。如果它有厚度,您可以使用CSG。


-1
使用SVGloader来加载一个所需半径的圆形(以SVG格式)。将几何体设置为ExtrudeBufferGeometry,并在挤出设置对象中以所需高度作为深度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接