threejs多边形`Shape`(内孔`.holes`)

参考资料:threejs中文网

threejs qq交流群:814702116

多边形Shape(内孔.holes)

有些多边形Shape内部是有孔洞的,这时候就需要借助多边形Shape的内孔.holes属性和Path对象实现。

在这里插入图片描述

外轮廓

先创建Shape的矩形外轮廓。

const shape = new THREE.Shape();
// .lineTo(100, 0)绘制直线线段,线段起点:.currentPoint,线段结束点:(100,0)
shape.lineTo(100, 0);
shape.lineTo(100, 100);
shape.lineTo(0, 100);

.holes设置内孔的轮廓

Path对象创建内部多个轮廓。

// Shape内孔轮廓
const path1 = new THREE.Path();// 圆孔1
path1.absarc(20, 20, 10);
const path2 = new THREE.Path();// 圆孔2
path2.absarc(80, 20, 10);
const path3 = new THREE.Path();// 方形孔
path3.moveTo(50, 50);
path3.lineTo(80, 50);
path3.lineTo(80, 80);
path3.lineTo(50, 80);
//三个内孔轮廓分别插入到holes属性中
shape.holes.push(path1, path2,path3);

Shape拉伸的效果图

上面代码定义的Shape,通过ExtrudeGeometry拉伸的效果图。

在这里插入图片描述

const geometry = new THREE.ExtrudeGeometry(shape, {
    depth:20,//拉伸长度
    bevelEnabled:false,//禁止倒角
    curveSegments:50,
});
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在three.js中创建管道截面,可以使用THREE.TubeGeometry和THREE.PlaneGeometry。 首先,我们需要创建一个THREE.TubeGeometry对象,该对象需要以下参数: - path:管道路径,可以是一个THREE.Curve路径或一个THREE.SplineCurve3路径。 - radius:管道半径。 - segments:管道在周向上的分段数。 - radiusSegments:管道在径向上的分段数。 - closed:管道是否封闭。 接下来,我们需要创建一个THREE.PlaneGeometry对象,该对象需要以下参数: - width:平面的宽度。 - height:平面的高度。 - widthSegments:平面在水平方向上的分段数。 - heightSegments:平面在垂直方向上的分段数。 最后,我们需要使用THREE.ShapeGeometry将管道和平面组合在一起。 以下是一个示例代码,用于创建一个带有管道截面的THREE.Mesh对象: ``` // 创建管道路径 var path = new THREE.SplineCurve3([ new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, 10), new THREE.Vector3(10, 0, 10), new THREE.Vector3(10, 5, 10), new THREE.Vector3(20, 5, 0), new THREE.Vector3(20, 0, 0) ]); // 创建管道几何体 var tubeGeometry = new THREE.TubeGeometry(path, 64, 0.5, 32, true); // 创建平面几何体 var planeGeometry = new THREE.PlaneGeometry(20, 20, 32, 32); // 创建管道截面几何体 var shape = new THREE.Shape(); shape.moveTo(-10, -10); shape.lineTo(-10, 10); shape.lineTo(10, 10); shape.lineTo(10, -10); var hole = new THREE.Path(); hole.moveTo(-5, -5); hole.lineTo(-5, 5); hole.lineTo(5, 5); hole.lineTo(5, -5); shape.holes.push(hole); var shapeGeometry = new THREE.ShapeGeometry(shape); // 组合管道和平面 var tubeMesh = new THREE.Mesh(tubeGeometry, new THREE.MeshBasicMaterial({ color: 0xff0000 })); var planeMesh = new THREE.Mesh(planeGeometry, new THREE.MeshBasicMaterial({ color: 0x00ff00 })); var shapeMesh = new THREE.Mesh(shapeGeometry, new THREE.MeshBasicMaterial({ color: 0x0000ff })); // 将所有物体添加到场景中 scene.add(tubeMesh); scene.add(planeMesh); scene.add(shapeMesh); ``` 这将创建一个带有管道截面的场景,其中红色物体是管道,绿色物体是平面,蓝色物体是管道截面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Threejs可视化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值