提交 3fea7a65 编写于 作者: M Mr.doob

TiltLoader: Join strokes by brush type.

上级 72730a56
......@@ -76,6 +76,8 @@ class TiltLoader extends Loader {
const num_strokes = data.getInt32( 16, true );
const brushes = {};
let offset = 20;
for ( let i = 0; i < num_strokes; i ++ ) {
......@@ -134,14 +136,23 @@ class TiltLoader extends Loader {
}
// console.log( positions, quaternions );
if ( brush_index in brushes === false ) {
brushes[ brush_index ] = [];
}
brushes[ brush_index ].push( [ positions, quaternions, brush_size, brush_color ] );
}
for ( const brush_index in brushes ) {
const geometry = new StrokeGeometry( positions, quaternions, brush_size, brush_color );
const geometry = new StrokeGeometry( brushes[ brush_index ] );
const material = getMaterial( metadata.BrushIndex[ brush_index ] );
group.add( new Mesh( geometry, material ) );
}
return group;
......@@ -152,7 +163,7 @@ class TiltLoader extends Loader {
class StrokeGeometry extends BufferGeometry {
constructor( positions, quaternions, size, color ) {
constructor( strokes ) {
super();
......@@ -161,10 +172,10 @@ class StrokeGeometry extends BufferGeometry {
const uvs = [];
const position = new Vector3();
const prevPosition = new Vector3().fromArray( positions, 0 );
const prevPosition = new Vector3();
const quaternion = new Quaternion();
const prevQuaternion = new Quaternion().fromArray( quaternions, 0 );
const prevQuaternion = new Quaternion();
const vector1 = new Vector3();
const vector2 = new Vector3();
......@@ -173,56 +184,69 @@ class StrokeGeometry extends BufferGeometry {
// size = size / 2;
for ( let i = 0, j = 0, l = positions.length; i < l; i += 3, j += 4 ) {
for ( const k in strokes ) {
const stroke = strokes[ k ];
const positions = stroke[ 0 ];
const quaternions = stroke[ 1 ];
const size = stroke[ 2 ];
const color = stroke[ 3 ];
prevPosition.fromArray( positions, 0 );
prevQuaternion.fromArray( quaternions, 0 );
position.fromArray( positions, i );
quaternion.fromArray( quaternions, j );
for ( let i = 3, j = 4, l = positions.length; i < l; i += 3, j += 4 ) {
vector1.set( - size, 0, 0 );
vector1.applyQuaternion( quaternion );
vector1.add( position );
position.fromArray( positions, i );
quaternion.fromArray( quaternions, j );
vector2.set( size, 0, 0 );
vector2.applyQuaternion( quaternion );
vector2.add( position );
vector1.set( - size, 0, 0 );
vector1.applyQuaternion( quaternion );
vector1.add( position );
vector3.set( size, 0, 0 );
vector3.applyQuaternion( prevQuaternion );
vector3.add( prevPosition );
vector2.set( size, 0, 0 );
vector2.applyQuaternion( quaternion );
vector2.add( position );
vector4.set( - size, 0, 0 );
vector4.applyQuaternion( prevQuaternion );
vector4.add( prevPosition );
vector3.set( size, 0, 0 );
vector3.applyQuaternion( prevQuaternion );
vector3.add( prevPosition );
vertices.push( vector1.x, vector1.y, - vector1.z );
vertices.push( vector2.x, vector2.y, - vector2.z );
vertices.push( vector4.x, vector4.y, - vector4.z );
vector4.set( - size, 0, 0 );
vector4.applyQuaternion( prevQuaternion );
vector4.add( prevPosition );
vertices.push( vector2.x, vector2.y, - vector2.z );
vertices.push( vector3.x, vector3.y, - vector3.z );
vertices.push( vector4.x, vector4.y, - vector4.z );
vertices.push( vector1.x, vector1.y, - vector1.z );
vertices.push( vector2.x, vector2.y, - vector2.z );
vertices.push( vector4.x, vector4.y, - vector4.z );
prevPosition.copy( position );
prevQuaternion.copy( quaternion );
vertices.push( vector2.x, vector2.y, - vector2.z );
vertices.push( vector3.x, vector3.y, - vector3.z );
vertices.push( vector4.x, vector4.y, - vector4.z );
colors.push( ...color );
colors.push( ...color );
colors.push( ...color );
prevPosition.copy( position );
prevQuaternion.copy( quaternion );
colors.push( ...color );
colors.push( ...color );
colors.push( ...color );
colors.push( ...color );
colors.push( ...color );
colors.push( ...color );
const p1 = i / l;
const p2 = ( i - 3 ) / l;
colors.push( ...color );
colors.push( ...color );
colors.push( ...color );
uvs.push( p1, 0 );
uvs.push( p1, 1 );
uvs.push( p2, 0 );
const p1 = i / l;
const p2 = ( i - 3 ) / l;
uvs.push( p1, 1 );
uvs.push( p2, 1 );
uvs.push( p2, 0 );
uvs.push( p1, 0 );
uvs.push( p1, 1 );
uvs.push( p2, 0 );
uvs.push( p1, 1 );
uvs.push( p2, 1 );
uvs.push( p2, 0 );
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册