提交 2af891d7 编写于 作者: Z zz85

change bevel vertices order

上级 ca40f42e
/**
* @author zz85 / http://www.lab4games.net/zz85/blog
* Creates extruded geometry form path.
* Creates extruded geometry from a path shape.
**/
THREE.ExtrudeGeometry = function( shape, options ) {
......@@ -8,14 +8,17 @@ THREE.ExtrudeGeometry = function( shape, options ) {
var amount = options.amount !== undefined ? options.amount : 100;
// todo: bevel
var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 4; // 10
var bevelSize = options.bevelSize !== undefined ? options.bevelSize : 6; // 8
var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : false;
var bevelSegments = 4;
var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 8; // 10
var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness; // 8
var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false
var bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 6;
// We should set bevel segments to 0 if bevel is not enabled.
if (!bevelEnabled) bevelSegments = 0 ;
var steps = options.steps !== undefined ? options.steps : 1;
var extrudePath = options.path !== undefined ? options.path : null;
var extrudePts, extrudeByPath = false;
if ( extrudePath ) {
......@@ -26,7 +29,6 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
bevelEnabled = true;
// TODO, extrude by path's tangents? also via 3d path?
......@@ -40,7 +42,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
// getPoints
var shapePoints = shape.extractAllPoints(true);
var shapePoints = shape.extractAllPoints(false);
// getPoints | getSpacedPoints() you can get variable divisions by dividing by total length
var vertices = shapePoints.shape;
......@@ -92,61 +94,9 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
console.log("same?", contour.length == vertices.length);
var i,
vert, vlen = vertices.length,
face, flen = faces.length,
cont, clen = contour.length,
hol, hlen;
var bevelPt, blen = bevelPoints.length;
// Back facing vertices
for ( i = 0; i < vlen; i++ ) {
vert = vertices[ i ];
v( vert.x, vert.y, 0 );
}
// Add steped vertices...
// Including front facing vertices
var s = 1;
for ( ; s <= steps; s++ ) {
for ( i = 0; i < vlen; i ++ ) {
vert = vertices[ i ];
if ( !extrudeByPath ) {
v( vert.x, vert.y, amount/steps * s );
} else {
v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );
}
}
}
// Add bevel planes
// Loop bevelSegments, 1 for the front, 1 for the back
var b;
// Find all centroids of shapes and holes
var b;
var sum = new THREE.Vector2();
var contourCentroid, holesCentroids;
......@@ -188,18 +138,25 @@ THREE.ExtrudeGeometry = function( shape, options ) {
return vectorFromCentroid.multiplyScalar( adj ).addSelf( centroid );
}
var i,
vert, vlen = vertices.length,
face, flen = faces.length,
cont, clen = contour.length,
hol, hlen;
var bs;
// Loop bevelSegments, 1 for the front, 1 for the back
for (b=bevelSegments; b > 0; b--) {
// z
// ****
t = b / bevelSegments;
z = bevelThickness * t;
bs = bevelSize * (1-Math.sin ((1-t) * Math.PI/2 )); //bevelSize * t ;
// Formula could probably be simplified
bs = bevelSize * (1-Math.sin ((1-t) * Math.PI/2 )) ; //bevelSize * t ;
//bs = Math.sqrt(- (t* t) - 2 * t * bevelThickness);
// contract shape
for ( i = 0, il = contour.length; i < il; i++ ) {
......@@ -221,6 +178,54 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
// Back facing vertices
for ( i = 0; i < vlen; i++ ) {
vert = vertices[ i ];
//v( vert.x, vert.y, 0 );
if ( !extrudeByPath ) {
v( vert.x, vert.y, 0 );
} else {
v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );
}
}
// Add steped vertices...
// Including front facing vertices
var s = 1;
for ( ; s <= steps; s++ ) {
for ( i = 0; i < vlen; i ++ ) {
vert = vertices[ i ];
if ( !extrudeByPath ) {
v( vert.x, vert.y, amount/steps * s );
} else {
v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );
}
}
}
// Add Bevel Segments planes
for (b=1; b <= bevelSegments; b++) {
t = b / bevelSegments;
......@@ -240,8 +245,18 @@ THREE.ExtrudeGeometry = function( shape, options ) {
ahole = holes[h];
for ( i = 0, il = ahole.length; i < il; i++ ) {
vert = scalePt(ahole[i], holesCentroids[h] , bs , true);
v( vert.x, vert.y, amount + z);
vert = scalePt(ahole[i], holesCentroids[h] , bs , true);
if ( !extrudeByPath ) {
v( vert.x, vert.y, amount + z);
} else {
v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x +z);
}
}
}
......@@ -258,10 +273,10 @@ THREE.ExtrudeGeometry = function( shape, options ) {
// Bottom faces
if ( bevelEnabled ) {
if (true|| bevelEnabled ) {
var layer = steps + 1;
var layer = 0 ; //steps + 1
var offset = vlen * layer;
for ( i = 0; i < flen; i++ ) {
......@@ -271,7 +286,7 @@ THREE.ExtrudeGeometry = function( shape, options ) {
}
layer = bevelSegments* 2;
layer = steps + bevelSegments* 2;
offset = vlen * layer;
// Top faces
......@@ -344,15 +359,47 @@ THREE.ExtrudeGeometry = function( shape, options ) {
var s = 0;
for ( ; s < (steps + bevelSegments* 2) ; s++ ) {
for ( ; s < (steps + bevelSegments * 2) ; s++ ) {
var slen1 = vlen * s;
var slen2 = vlen * ( s + 1 );
f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 );
}
/*
// if we have bevel in the correct order, we could potentially do everything in a loop.
for ( s = steps + 1; s < (steps + bevelSegments) ; s++ ) {
var slen1 = vlen * s;
var slen2 = vlen * ( s + 1 );
if ( (s+1)==(steps + bevelSegments) ) {
slen2 = vlen * 0;
}
f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 );
}
// if we have bevel in the correct order, we could potentially do everything in a loop.
for ( s = (steps + bevelSegments * 2); s > (steps + bevelSegments) ; s-- ) {
var slen1 = vlen * s;
var slen2 = vlen * ( s -1 );
if ( (s )==(steps + bevelSegments) ) {
slen2 = vlen * steps;
}
f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 );
}
*/
//
......@@ -387,15 +434,8 @@ THREE.ExtrudeGeometry = function( shape, options ) {
function f4( a, b, c, d ) {
// if ( reverse ) {
//
// scope.faces.push( new THREE.Face4( d, c, b, a ) );
//
// } else {
//
scope.faces.push( new THREE.Face4( a, b, c, d ) );
//
// }
scope.faces.push( new THREE.Face4( a, b, c, d ) );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册