提交 aa6c39de 编写于 作者: T Takahiro

Merge branch 'dev' into UpdateGLTFLoader

...@@ -86,6 +86,6 @@ ...@@ -86,6 +86,6 @@
<h2>Source</h2> <h2>Source</h2>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js] [link:https://github.com/mrdoob/three.js/blob/master/src/extras/core/Path.js src/extras/core/Path.js]
</body> </body>
</html> </html>
...@@ -84,7 +84,7 @@ var Script = function ( editor ) { ...@@ -84,7 +84,7 @@ var Script = function ( editor ) {
if ( value !== currentScript.source ) { if ( value !== currentScript.source ) {
editor.execute( new SetScriptValueCommand( currentObject, currentScript, 'source', value, codemirror.getCursor() ) ); editor.execute( new SetScriptValueCommand( currentObject, currentScript, 'source', value, codemirror.getCursor(), codemirror.getScrollInfo() ) );
} }
return; return;
...@@ -422,7 +422,7 @@ var Script = function ( editor ) { ...@@ -422,7 +422,7 @@ var Script = function ( editor ) {
} ); } );
signals.refreshScriptEditor.add( function ( object, script, cursorPosition ) { signals.refreshScriptEditor.add( function ( object, script, cursorPosition, scrollInfo ) {
if ( currentScript !== script ) return; if ( currentScript !== script ) return;
...@@ -435,6 +435,7 @@ var Script = function ( editor ) { ...@@ -435,6 +435,7 @@ var Script = function ( editor ) {
if ( cursorPosition !== undefined ) { if ( cursorPosition !== undefined ) {
codemirror.setCursor( cursorPosition ); codemirror.setCursor( cursorPosition );
codemirror.scrollTo( scrollInfo.left, scrollInfo.top );
} }
codemirror.setHistory( history ); // setting the history to previous state codemirror.setHistory( history ); // setting the history to previous state
......
...@@ -9,10 +9,11 @@ ...@@ -9,10 +9,11 @@
* @param attributeName string * @param attributeName string
* @param newValue string, object * @param newValue string, object
* @param cursorPosition javascript object with format {line: 2, ch: 3} * @param cursorPosition javascript object with format {line: 2, ch: 3}
* @param scrollInfo javascript object with values {left, top, width, height, clientWidth, clientHeight}
* @constructor * @constructor
*/ */
var SetScriptValueCommand = function ( object, script, attributeName, newValue, cursorPosition ) { var SetScriptValueCommand = function ( object, script, attributeName, newValue, cursorPosition, scrollInfo ) {
Command.call( this ); Command.call( this );
...@@ -27,6 +28,7 @@ var SetScriptValueCommand = function ( object, script, attributeName, newValue, ...@@ -27,6 +28,7 @@ var SetScriptValueCommand = function ( object, script, attributeName, newValue,
this.oldValue = ( script !== undefined ) ? script[ this.attributeName ] : undefined; this.oldValue = ( script !== undefined ) ? script[ this.attributeName ] : undefined;
this.newValue = newValue; this.newValue = newValue;
this.cursorPosition = cursorPosition; this.cursorPosition = cursorPosition;
this.scrollInfo = scrollInfo;
}; };
...@@ -37,7 +39,7 @@ SetScriptValueCommand.prototype = { ...@@ -37,7 +39,7 @@ SetScriptValueCommand.prototype = {
this.script[ this.attributeName ] = this.newValue; this.script[ this.attributeName ] = this.newValue;
this.editor.signals.scriptChanged.dispatch(); this.editor.signals.scriptChanged.dispatch();
this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition ); this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition, this.scrollInfo );
}, },
...@@ -46,13 +48,14 @@ SetScriptValueCommand.prototype = { ...@@ -46,13 +48,14 @@ SetScriptValueCommand.prototype = {
this.script[ this.attributeName ] = this.oldValue; this.script[ this.attributeName ] = this.oldValue;
this.editor.signals.scriptChanged.dispatch(); this.editor.signals.scriptChanged.dispatch();
this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition ); this.editor.signals.refreshScriptEditor.dispatch( this.object, this.script, this.cursorPosition, this.scrollInfo );
}, },
update: function ( cmd ) { update: function ( cmd ) {
this.cursorPosition = cmd.cursorPosition; this.cursorPosition = cmd.cursorPosition;
this.scrollInfo = cmd.scrollInfo;
this.newValue = cmd.newValue; this.newValue = cmd.newValue;
}, },
...@@ -67,6 +70,7 @@ SetScriptValueCommand.prototype = { ...@@ -67,6 +70,7 @@ SetScriptValueCommand.prototype = {
output.oldValue = this.oldValue; output.oldValue = this.oldValue;
output.newValue = this.newValue; output.newValue = this.newValue;
output.cursorPosition = this.cursorPosition; output.cursorPosition = this.cursorPosition;
output.scrollInfo = this.scrollInfo;
return output; return output;
...@@ -82,6 +86,7 @@ SetScriptValueCommand.prototype = { ...@@ -82,6 +86,7 @@ SetScriptValueCommand.prototype = {
this.object = this.editor.objectByUuid( json.objectUuid ); this.object = this.editor.objectByUuid( json.objectUuid );
this.script = this.editor.scripts[ json.objectUuid ][ json.index ]; this.script = this.editor.scripts[ json.objectUuid ][ json.index ];
this.cursorPosition = json.cursorPosition; this.cursorPosition = json.cursorPosition;
this.scrollInfo = json.scrollInfo;
} }
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
return new THREE.Vector3( x, y, z ).multiplyScalar( this.scale ); return new THREE.Vector3( x, y, z ).multiplyScalar( this.scale );
} };
// Viviani's Curve // Viviani's Curve
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
this.scale = ( s === undefined ) ? 10 : s; this.scale = ( s === undefined ) ? 10 : s;
}; }
TrefoilKnot.prototype = Object.create( THREE.Curve.prototype ); TrefoilKnot.prototype = Object.create( THREE.Curve.prototype );
TrefoilKnot.prototype.constructor = TrefoilKnot; TrefoilKnot.prototype.constructor = TrefoilKnot;
...@@ -152,7 +152,7 @@ ...@@ -152,7 +152,7 @@
this.scale = ( s === undefined ) ? 10 : s; this.scale = ( s === undefined ) ? 10 : s;
}; }
TorusKnot.prototype = Object.create( THREE.Curve.prototype ); TorusKnot.prototype = Object.create( THREE.Curve.prototype );
TorusKnot.prototype.constructor = TorusKnot; TorusKnot.prototype.constructor = TorusKnot;
...@@ -178,7 +178,7 @@ ...@@ -178,7 +178,7 @@
this.scale = ( s === undefined ) ? 10 : s; this.scale = ( s === undefined ) ? 10 : s;
}; }
CinquefoilKnot.prototype = Object.create( THREE.Curve.prototype ); CinquefoilKnot.prototype = Object.create( THREE.Curve.prototype );
CinquefoilKnot.prototype.constructor = CinquefoilKnot; CinquefoilKnot.prototype.constructor = CinquefoilKnot;
...@@ -204,7 +204,7 @@ ...@@ -204,7 +204,7 @@
this.scale = ( s === undefined ) ? 10 : s; this.scale = ( s === undefined ) ? 10 : s;
}; }
TrefoilPolynomialKnot.prototype = Object.create( THREE.Curve.prototype ); TrefoilPolynomialKnot.prototype = Object.create( THREE.Curve.prototype );
TrefoilPolynomialKnot.prototype.constructor = TrefoilPolynomialKnot; TrefoilPolynomialKnot.prototype.constructor = TrefoilPolynomialKnot;
...@@ -234,7 +234,7 @@ ...@@ -234,7 +234,7 @@
this.scale = ( s === undefined ) ? 1 : s; this.scale = ( s === undefined ) ? 1 : s;
}; }
FigureEightPolynomialKnot.prototype = Object.create( THREE.Curve.prototype ); FigureEightPolynomialKnot.prototype = Object.create( THREE.Curve.prototype );
FigureEightPolynomialKnot.prototype.constructor = FigureEightPolynomialKnot; FigureEightPolynomialKnot.prototype.constructor = FigureEightPolynomialKnot;
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
this.scale = ( s === undefined ) ? 40 : s; this.scale = ( s === undefined ) ? 40 : s;
}; }
DecoratedTorusKnot4a.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot4a.prototype = Object.create( THREE.Curve.prototype );
DecoratedTorusKnot4a.prototype.constructor = DecoratedTorusKnot4a; DecoratedTorusKnot4a.prototype.constructor = DecoratedTorusKnot4a;
...@@ -280,7 +280,7 @@ ...@@ -280,7 +280,7 @@
this.scale = ( s === undefined ) ? 40 : s; this.scale = ( s === undefined ) ? 40 : s;
}; }
DecoratedTorusKnot4b.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot4b.prototype = Object.create( THREE.Curve.prototype );
DecoratedTorusKnot4b.prototype.constructor = DecoratedTorusKnot4b; DecoratedTorusKnot4b.prototype.constructor = DecoratedTorusKnot4b;
...@@ -303,7 +303,7 @@ ...@@ -303,7 +303,7 @@
this.scale = ( s === undefined ) ? 40 : s; this.scale = ( s === undefined ) ? 40 : s;
}; }
DecoratedTorusKnot5a.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot5a.prototype = Object.create( THREE.Curve.prototype );
DecoratedTorusKnot5a.prototype.constructor = DecoratedTorusKnot5a; DecoratedTorusKnot5a.prototype.constructor = DecoratedTorusKnot5a;
...@@ -326,7 +326,7 @@ ...@@ -326,7 +326,7 @@
this.scale = ( s === undefined ) ? 40 : s; this.scale = ( s === undefined ) ? 40 : s;
}; }
DecoratedTorusKnot5c.prototype = Object.create( THREE.Curve.prototype ); DecoratedTorusKnot5c.prototype = Object.create( THREE.Curve.prototype );
DecoratedTorusKnot5c.prototype.constructor = DecoratedTorusKnot5c; DecoratedTorusKnot5c.prototype.constructor = DecoratedTorusKnot5c;
......
...@@ -255,36 +255,6 @@ THREE.GLTFLoader = ( function () { ...@@ -255,36 +255,6 @@ THREE.GLTFLoader = ( function () {
}; };
function createAnimation( name, interps ) {
var tracks = [];
for ( var i = 0, len = interps.length; i < len; i ++ ) {
var interp = interps[ i ];
// KeyframeTrack.optimize() will modify given 'times' and 'values'
// buffers before creating a truncated copy to keep. Because buffers may
// be reused by other tracks, make copies here.
interp.times = THREE.AnimationUtils.arraySlice( interp.times, 0 );
interp.values = THREE.AnimationUtils.arraySlice( interp.values, 0 );
interp.target.updateMatrix();
interp.target.matrixAutoUpdate = true;
tracks.push( new THREE.KeyframeTrack(
interp.name,
interp.times,
interp.values,
interp.type
) );
}
return new THREE.AnimationClip( name, undefined, tracks );
}
/*********************************/ /*********************************/
/********** INTERNALS ************/ /********** INTERNALS ************/
/*********************************/ /*********************************/
...@@ -1551,7 +1521,7 @@ THREE.GLTFLoader = ( function () { ...@@ -1551,7 +1521,7 @@ THREE.GLTFLoader = ( function () {
return _each( json.animations, function ( animation, animationId ) { return _each( json.animations, function ( animation, animationId ) {
var interps = []; var tracks = [];
for ( var channelId in animation.channels ) { for ( var channelId in animation.channels ) {
...@@ -1572,17 +1542,24 @@ THREE.GLTFLoader = ( function () { ...@@ -1572,17 +1542,24 @@ THREE.GLTFLoader = ( function () {
if ( node ) { if ( node ) {
var targetName = node.name ? node.name : node.uuid; node.updateMatrix();
node.matrixAutoUpdate = true;
var TypedKeyframeTrack = PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.rotation
? THREE.QuaternionKeyframeTrack
: THREE.VectorKeyframeTrack;
var interp = { var targetName = node.name ? node.name : node.uuid;
times: inputAccessor.array,
values: outputAccessor.array,
target: node,
type: INTERPOLATION[ sampler.interpolation ],
name: targetName + '.' + PATH_PROPERTIES[ target.path ]
};
interps.push( interp ); // KeyframeTrack.optimize() will modify given 'times' and 'values'
// buffers before creating a truncated copy to keep. Because buffers may
// be reused by other tracks, make copies here.
tracks.push( new TypedKeyframeTrack(
targetName + '.' + PATH_PROPERTIES[ target.path ],
THREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ),
THREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ),
INTERPOLATION[ sampler.interpolation ]
) );
} }
...@@ -1590,7 +1567,7 @@ THREE.GLTFLoader = ( function () { ...@@ -1590,7 +1567,7 @@ THREE.GLTFLoader = ( function () {
} }
return createAnimation( "animation_" + animationId, interps ); return new THREE.AnimationClip( "animation_" + animationId, undefined, tracks );
} ); } );
......
...@@ -47,38 +47,59 @@ ...@@ -47,38 +47,59 @@
<!-- replace built-in triangulation with Earcut --> <!-- replace built-in triangulation with Earcut -->
<script src="js/libs/earcut.js"></script> <script src="js/libs/earcut.js"></script>
<script> <script>
function addContour( vertices, contour ) {
for ( var i = 0; i < contour.length; i++ ) {
vertices.push( contour[i].x );
vertices.push( contour[i].y );
}
}
THREE.ShapeUtils.triangulateShape = function ( contour, holes ) { THREE.ShapeUtils.triangulateShape = function ( contour, holes ) {
var vertices = [];
addContour( vertices, contour ); function removeDupEndPts( points ) {
var l = points.length;
if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {
points.pop();
}
}
function addContour( vertices, contour ) {
var holeIndices = []; for ( var i = 0; i < contour.length; i ++ ) {
var holeIndex = contour.length;
for ( i = 0; i < holes.length; i++ ) { vertices.push( contour[ i ].x );
holeIndices.push( holeIndex ); vertices.push( contour[ i ].y );
holeIndex += holes[i].length;
addContour( vertices, holes[i] );
}
var result = earcut( vertices, holeIndices, 2 ); }
}
removeDupEndPts( contour );
holes.forEach( removeDupEndPts );
var vertices = [];
addContour( vertices, contour );
var holeIndices = [];
var holeIndex = contour.length;
for ( i = 0; i < holes.length; i ++ ) {
holeIndices.push( holeIndex );
holeIndex += holes[ i ].length;
addContour( vertices, holes[ i ] );
}
var result = earcut( vertices, holeIndices, 2 );
var grouped = [];
for ( var i = 0; i < result.length; i += 3 ) {
grouped.push( result.slice( i, i + 3 ) );
}
return grouped;
var grouped = [];
for ( var i = 0; i < result.length; i += 3 ) {
grouped.push( result.slice( i, i + 3 ) );
}
return grouped;
}; };
</script> </script>
<script> <script>
if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册