Skip to content

Instantly share code, notes, and snippets.

@cyc1am3n
Created June 6, 2017 06:10
Show Gist options
  • Save cyc1am3n/a885cb12a03b93a39060c9d6e0190161 to your computer and use it in GitHub Desktop.
Save cyc1am3n/a885cb12a03b93a39060c9d6e0190161 to your computer and use it in GitHub Desktop.
rollercoastergeometry 안에
var sides = 5;
var step1 = [ ];
for ( var i = 0; i < sides; i ++ ) {
var angle = ( i / sides ) * PI2; //angle이 72, 144, 216, 288, 360 다섯 가지가 됨
step1.push( new THREE.Vector3(0 , Math.sin( angle ) * 0.02, Math.cos( angle ) * 0.02 ) );
}
..................
function extrudeShapeSide( shape, fromPoint, toPoint, color ) {
for ( var j = 0, jl = shape.length; j < jl; j ++ ) {
var point1 = shape[ j ];
var point2 = shape[ ( j + 1 ) % jl ];
vector1.copy( point1 );
vector1.applyQuaternion( quaternion );
vector1.add( fromPoint );
vector2.copy( point2 );
vector2.applyQuaternion( quaternion );
vector2.add( fromPoint );
vector3.copy( point2 );
vector3.applyQuaternion( quaternion );
vector3.add( toPoint );
vector4.copy( point1 );
vector4.applyQuaternion( quaternion );
vector4.add( toPoint );
vertices.push( vector1.x, vector1.y, vector1.z );
vertices.push( vector2.x, vector2.y, vector2.z );
vertices.push( vector4.x, vector4.y, vector4.z );
vertices.push( vector2.x, vector2.y, vector2.z );
vertices.push( vector3.x, vector3.y, vector3.z );
vertices.push( vector4.x, vector4.y, vector4.z );
//
normal1.copy( point1 );
normal1.applyQuaternion( quaternion );
normal1.normalize();
normal2.copy( point2 );
normal2.applyQuaternion( quaternion );
normal2.normalize();
normal3.copy( point2 );
normal3.applyQuaternion( quaternion );
normal3.normalize();
normal4.copy( point1 );
normal4.applyQuaternion( quaternion );
normal4.normalize();
normals.push( normal1.x, normal1.y, normal1.z );
normals.push( normal2.x, normal2.y, normal2.z );
normals.push( normal4.x, normal4.y, normal4.z );
normals.push( normal2.x, normal2.y, normal2.z );
normals.push( normal3.x, normal3.y, normal3.z );
normals.push( normal4.x, normal4.y, normal4.z );
colors.push( color[ 0 ], color[ 1 ], color[ 2 ] );
colors.push( color[ 0 ], color[ 1 ], color[ 2 ] );
colors.push( color[ 0 ], color[ 1 ], color[ 2 ] );
colors.push( color[ 0 ], color[ 1 ], color[ 2 ] );
colors.push( color[ 0 ], color[ 1 ], color[ 2 ] );
colors.push( color[ 0 ], color[ 1 ], color[ 2 ] );
}
};
var fromPoint = new THREE.Vector3();
var toPoint = new THREE.Vector3();
........
if ( i % 2 === 0 ) {
//가운데 노란 레일 양 옆에 노란색 세모 두 개 그리기
fromPoint.set(-0.2,-0.02,0);
fromPoint.applyQuaternion( quaternion );
fromPoint.add( point );
toPoint.set(0,-0.135,0);
toPoint.applyQuaternion( quaternion );
toPoint.add( point );
extrudeShapeSide(step1, fromPoint, toPoint, color2);
fromPoint.set(0.2,-0.02,0);
fromPoint.applyQuaternion( quaternion );
fromPoint.add( point );
toPoint.set(0,-0.135,0);
toPoint.applyQuaternion( quaternion );
toPoint.add( point );
extrudeShapeSide(step1, fromPoint, toPoint, color2);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment