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

WebGLRenderer: Refactored morph targets handling.

上级 0fbe55dd
......@@ -687,24 +687,50 @@ function WebGLRenderer( parameters ) {
if ( objectInfluences !== undefined ) {
var length = objectInfluences.length;
var influences = influencesList[ geometry.id ];
if ( influences === undefined ) {
influencesList[ geometry.id ] = influences = new Array( objectInfluences.length );
// initialise list
influences = [];
for ( var i = 0; i < length; i ++ ) {
influences[ i ] = [ i, 0 ];
}
influencesList[ geometry.id ] = influences;
}
for ( var i = 0, l = objectInfluences.length; i < l; i ++ ) {
var morphTargets = material.morphTargets && geometry.morphAttributes.position;
var morphNormals = material.morphNormals && geometry.morphAttributes.normal;
// Remove current morphAttributes
for ( var i = 0; i < length; i ++ ) {
var influence = influences[ i ];
if ( influence === undefined ) {
if ( influence[ 1 ] !== 0 ) {
influences[ i ] = influence = new Array( 2 );
if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );
if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );
}
}
// Collect influences
for ( var i = 0; i < length; i ++ ) {
var influence = influences[ i ];
influence[ 0 ] = i;
influence[ 1 ] = objectInfluences[ i ];
......@@ -712,36 +738,28 @@ function WebGLRenderer( parameters ) {
influences.sort( absNumericalSort );
var morphTargets = material.morphTargets && geometry.morphAttributes.position;
var morphNormals = material.morphNormals && geometry.morphAttributes.normal;
for ( var i = 0, l = Math.min( influences.length, 8 ); i < l; i ++ ) {
// Add morphAttributes
var morphTargetId = 'morphTarget' + i;
var morphNormalId = 'morphNormal' + i;
for ( var i = 0; i < 8; i ++ ) {
var influence = influences[ i ];
var index = influence[ 0 ];
var value = influence[ 1 ];
if ( influence ) {
if ( value !== 0 ) {
var index = influence[ 0 ];
var value = influence[ 1 ];
if ( morphTargets ) geometry.addAttribute( morphTargetId, morphTargets[ index ] );
if ( morphNormals ) geometry.addAttribute( morphNormalId, morphNormals[ index ] );
if ( value ) {
} else {
if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );
if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );
if ( morphTargets ) geometry.removeAttribute( morphTargetId );
if ( morphNormals ) geometry.removeAttribute( morphNormalId );
morphInfluences[ i ] = value;
continue;
}
morphInfluences[ i ] = value;
}
}
for ( var i = Math.min( influences.length, 8 ), il = morphInfluences.length; i < il; i ++ ) {
}
morphInfluences[ i ] = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册