如何改变three.js圆柱体的厚度

5
如果我使用three.js创建一个基本的空心圆柱体,就像在JSFiddle中一样,我该如何改变墙壁的厚度?
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 95, window.innerWidth / window.innerHeight, 0.1, 1000 );

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );

var geometry = new THREE.CylinderGeometry( 2, 2, 5, 360, 1, true );
var material = new THREE.MeshNormalMaterial( { color: 0x00ff00, side: THREE.DoubleSide } );
var cube = new THREE.Mesh( geometry, material );
scene.add( cube );

camera.position.y = 5;
camera.position.z = 5;
camera.lookAt(0,0,0);

function animate() {
    requestAnimationFrame( animate );
    renderer.render( scene, camera );
}
animate();

JSFiddle示例


你是指像这样的东西吗:https://dev59.com/t2bWa4cB1Zd3GeqPcPM9 - Gerdon Abbink
是的,我看到了,但不太理解。那么它是说圆柱体不能有厚度,如果您想要一个厚度,则必须使用arcshape吗? - geoffs3310
1个回答

3
不,您需要从一个圆柱体中减去另一个圆柱体。您需要从中减去的是圆柱体的内径。
所以我将您的代码更改为以下内容:
var outerGeometry = new THREE.CylinderGeometry(2, 2, 5, 360, 1);
var innerGeometry = new THREE.CylinderGeometry(1.5, 1.5, 5, 360, 1);
var material = new THREE.MeshNormalMaterial({
    color: 0x00ff00,
    side: THREE.DoubleSide
});

var outerCylinder = new ThreeBSP(outerGeometry);
var innerCylinder = new ThreeBSP(innerGeometry);

var hollowedCylinder = innerCylinder.union(outerCylinder);

scene.add(hollowedCylinder.toMesh(material));

这里是代码片段: http://jsfiddle.net/gerdonabbink/tephoLr1/133/ 你可以看到内圆柱体的厚度为1.5,比如将其改为1就可以使厚度为1。

哦,好的,那么如何从一个圆柱体中减去另一个圆柱体以创建厚度呢? - geoffs3310
我已经更新了我的答案,加入了你的解决方案。在fiddle中,你也可以看到我添加了threejs和threecsg脚本。 - Gerdon Abbink

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