旋转造型 LatheGeometry
优质
小牛编辑
127浏览
2023-12-01
生活中有很多的几何体具备旋转特征,比如球体,常见杯子, three.js提供了一个构造函数LatheGeometry()
, LatheGeometry
可以利用已有的二维数据生成三维顶点数据,二维数据可以通过二维向量对象Vector2
定义,也可以通过3D曲线或2D线条轮廓生成。 LatheGeometry
的二维坐标数据默认绕y轴旋转。
格式:LatheGeometry(points, segments, phiStart, phiLength)
参数 | 值 |
---|---|
points | Vector2表示的坐标数据组成的数组 |
segments | 圆周方向细分数,默认12 |
phiStart | 开始角度,默认0 |
phiLength | 旋转角度,默认2π |
/**
* 创建旋转网格模型
*/
var points = [
new THREE.Vector2(50,60),
new THREE.Vector2(25,0),
new THREE.Vector2(50,-60)
];
var geometry = new THREE.LatheGeometry(points,30);
var material=new THREE.MeshPhongMaterial({
color:0x0000ff,//三角面颜色
side:THREE.DoubleSide//两面可见
});//材质对象
material.wireframe = true;//线条模式渲染(查看细分数)
var mesh=new THREE.Mesh(geometry,material);//旋转网格模型对象
scene.add(mesh);//旋转网格模型添加到场景中
样条曲线插值计算
借助Shape对象的方法.splineThru()
,把上面的三个顶点进行样条插值计算, 可以得到一个光滑的旋转曲面。
var shape = new THREE.Shape();//创建Shape对象
var points = [//定位定点
new THREE.Vector2(50,60),
new THREE.Vector2(25,0),
new THREE.Vector2(50,-60)
];
shape.splineThru(points);//顶点带入样条插值计算函数
var splinePoints = shape.getPoints(20);//插值计算细分数20
var geometry = new THREE.LatheGeometry(splinePoints,30);//旋转造型
shape.getPoints(20)
的作用是利用已有的顶点插值计算出新的顶点,两个顶点之间插值计算出20个顶点,如果细分数是1不是20,相当于不进行插值计算, 插值计算的规则通过Shape对象的方法.splineThru()
定义,几何曲线的角度描述,splineThru
的作用就是创建一个样条曲线,除了样条曲线还可以使用贝赛尔等曲线进行插值计算。