I'm trying to create an egg mesh in Three.js. I've written the code below, using a LatheGeometry, but I'm missing the right equation. Can anyone help?
var r0 = 40
var r1 = r0/4;
var inc = Math.PI/r0;
points = [];
points.push( new THREE.Vector2( 0.0001, -r0/2 ) );
for ( var i = 0; i <= r0; i ++ ) {
var def = i<r0/2 ? 0 : r1*Math.sin((i-r0/2)*inc);
points.push( new THREE.Vector2( Math.sqrt(r0*i-i*i), i+def-r0/2 ) );
}
points.push( new THREE.Vector2( 0.0001, -r0/2 ) );
var geometry = new THREE.LatheGeometry( points, 30 );
var material = new THREE.MeshPhongMaterial( { color: 0xFFFF20 } );
Ovo = new THREE.Mesh( geometry, material );
Ovo.position.set(0, 20.1, 0);
scene.add( Ovo );
I'm trying to create an egg mesh in Three.js. I've written the code below, using a LatheGeometry, but I'm missing the right equation. Can anyone help?
var r0 = 40
var r1 = r0/4;
var inc = Math.PI/r0;
points = [];
points.push( new THREE.Vector2( 0.0001, -r0/2 ) );
for ( var i = 0; i <= r0; i ++ ) {
var def = i<r0/2 ? 0 : r1*Math.sin((i-r0/2)*inc);
points.push( new THREE.Vector2( Math.sqrt(r0*i-i*i), i+def-r0/2 ) );
}
points.push( new THREE.Vector2( 0.0001, -r0/2 ) );
var geometry = new THREE.LatheGeometry( points, 30 );
var material = new THREE.MeshPhongMaterial( { color: 0xFFFF20 } );
Ovo = new THREE.Mesh( geometry, material );
Ovo.position.set(0, 20.1, 0);
scene.add( Ovo );
Share
Improve this question
edited May 9, 2016 at 2:11
Laurel
6,19114 gold badges34 silver badges59 bronze badges
asked May 9, 2016 at 2:05
alex banhaalex banha
256 bronze badges
1 Answer
Reset to default 12You can create an "egg" geometry like so:
// points - (x, y) pairs are rotated around the y-axis
const points = [];
for ( let deg = 0; deg <= 180; deg += 6 ) {
const rad = Math.PI * deg / 180;
const point = new THREE.Vector2( ( 0.72 + .08 * Math.cos( rad ) ) * Math.sin( rad ), - Math.cos( rad ) ); // the "egg equation"
//console.log( point ); // x-coord should be greater than zero to avoid degenerate triangles; it is not in this formula.
points.push( point );
}
const geometry = new THREE.LatheGeometry( points, 32 );
three.js r.147