30 lines
813 B
JavaScript
30 lines
813 B
JavaScript
|
import * as THREE from 'three';
|
||
|
|
||
|
export const calculateGeometry = (spiralHeight) => {
|
||
|
let pointsOfCurve = [];
|
||
|
const number = 100;
|
||
|
for (let i = 0; i <= number; i ++) {
|
||
|
let p = i / number;
|
||
|
|
||
|
let x = Math.cos(p * 2 * Math.PI);
|
||
|
let y = p * spiralHeight;
|
||
|
let z = Math.sin(p * 2 * Math.PI);
|
||
|
|
||
|
pointsOfCurve.push(new THREE.Vector3(x, y, z));
|
||
|
}
|
||
|
|
||
|
let curve = new THREE.CatmullRomCurve3(pointsOfCurve);
|
||
|
return new THREE.TubeGeometry(curve, 400, 0.1, 400, false);
|
||
|
}
|
||
|
|
||
|
export class SpiralSegment {
|
||
|
constructor(number, height, material) {
|
||
|
this.number = number;
|
||
|
this.segment = new THREE.Mesh(calculateGeometry(height), material);
|
||
|
this.segment.position.y += number * height;
|
||
|
}
|
||
|
|
||
|
getSegment() {
|
||
|
return this.segment;
|
||
|
}
|
||
|
}
|