3d-tiles-renderer
Version:
https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification
56 lines (36 loc) • 1.41 kB
JavaScript
import { LineSegments, BufferGeometry, Vector3, BufferAttribute, LineBasicMaterial } from 'three';
const _vector = /* @__PURE__ */ new Vector3();
const axes = [ 'x', 'y', 'z' ];
export class SphereHelper extends LineSegments {
constructor( sphere, color = 0xffff00, angleSteps = 40 ) {
const geometry = new BufferGeometry();
const positions = [];
for ( let i = 0; i < 3; i ++ ) {
const axis1 = axes[ i ];
const axis2 = axes[ ( i + 1 ) % 3 ];
_vector.set( 0, 0, 0 );
for ( let a = 0; a < angleSteps; a ++ ) {
let angle;
angle = 2 * Math.PI * a / ( angleSteps - 1 );
_vector[ axis1 ] = Math.sin( angle );
_vector[ axis2 ] = Math.cos( angle );
positions.push( _vector.x, _vector.y, _vector.z );
angle = 2 * Math.PI * ( a + 1 ) / ( angleSteps - 1 );
_vector[ axis1 ] = Math.sin( angle );
_vector[ axis2 ] = Math.cos( angle );
positions.push( _vector.x, _vector.y, _vector.z );
}
}
geometry.setAttribute( 'position', new BufferAttribute( new Float32Array( positions ), 3 ) );
geometry.computeBoundingSphere();
super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );
this.sphere = sphere;
this.type = 'SphereHelper';
}
updateMatrixWorld( force ) {
const sphere = this.sphere;
this.position.copy( sphere.center );
this.scale.setScalar( sphere.radius );
super.updateMatrixWorld( force );
}
}