2012-08-06 62 views
3

我在Three.js中構造空心圓柱體時遇到困難。如何在Three.js中構造空心圓柱體

我應該去使用CSG或將頂點拼接在一起來構建它嗎?

+0

我有同樣的問題,但措辭不同。 http://stackoverflow.com/questions/11638686/straight-tube-using-tubegeometry – Recur 2012-08-08 01:26:54

回答

6

該解決方案使用ChandlerPrall的ThreeCSG.js項目:http://github.com/chandlerprall/ThreeCSG

(就目前而言,我建議使用支持材料實驗版本 - 紫外分支 - 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); 
+0

是的,謝謝,我想出了幾乎相同的解決方案。 – 2012-08-08 08:45:18

+0

你是創業板!優秀。 – 2015-07-01 14:13:38

2

這是不可能的,你將不得不縫合頂點。如果您的氣缸沒有厚度,您可以使用THREE.CylinderGeometry()。如果它確實有厚度,可以使用CSG。

4
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); 
相關問題