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

DirectGeometry: Rescued MorphTargets.

上级 c17fc1df
......@@ -170,53 +170,43 @@ THREE.BufferGeometry.prototype = {
} else if ( object instanceof THREE.Mesh ) {
if ( geometry instanceof THREE.DirectGeometry ) {
this.fromDirectGeometry( geometry );
} else if ( geometry instanceof THREE.Geometry ) {
if ( geometry instanceof THREE.Geometry ) {
this.fromGeometry( geometry );
}
// skinning
// skinning
if ( object instanceof THREE.SkinnedMesh ) {
if ( object instanceof THREE.SkinnedMesh ) {
/*
var skinIndices = new THREE.Float32Attribute( geometry.skinIndices.length * 4, 4 );
var skinWeights = new THREE.Float32Attribute( geometry.skinWeights.length * 4, 4 );
/*
var skinIndices = new THREE.Float32Attribute( geometry.skinIndices.length * 4, 4 );
var skinWeights = new THREE.Float32Attribute( geometry.skinWeights.length * 4, 4 );
this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );
this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );
*/
this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );
this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );
*/
}
// morphs
}
if ( object.morphTargetInfluences !== undefined ) {
// morphs
/*
var morphTargets = geometry.morphTargets;
if ( object.morphTargetInfluences !== undefined ) {
if ( morphTargets.length > 0 ) {
var morphTargets = geometry.__directGeometry.morphTargets;
for ( var i = 0, l = morphTargets.length; i < l; i ++ ) {
var morphTarget = morphTargets[ i ];
var attribute = new THREE.Float32Attribute( morphTarget.vertices.length * 3, 3 );
var attribute = new THREE.Float32Attribute( morphTarget.length * 3, 3 );
this.morphAttributes.push( attribute.copyVector3sArray( morphTarget.vertices ) );
this.morphAttributes.push( attribute.copyVector3sArray( morphTarget ) );
}
}
*/
// TODO normals, colors
// TODO normals, colors
}
}
......
......@@ -18,6 +18,10 @@ THREE.DirectGeometry = function () {
this.uvs = [];
this.uvs2 = [];
this.morphTargets = [];
this.morphColors = [];
this.morphNormals = [];
// this.lineDistances = [];
this.boundingBox = null;
......@@ -65,6 +69,37 @@ THREE.DirectGeometry.prototype = {
var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;
var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;
// morphs
var morphTargets = geometry.morphTargets;
var morphTargetsLength = morphTargets.length;
for ( var i = 0; i < morphTargetsLength; i ++ ) {
this.morphTargets[ i ] = [];
}
var morphNormals = geometry.morphNormals;
var morphNormalsLength = morphNormals.length;
for ( var i = 0; i < morphNormalsLength; i ++ ) {
this.morphNormals[ i ] = [];
}
var morphColors = geometry.morphColors;
var morphColorsLength = morphColors.length;
for ( var i = 0; i < morphColorsLength; i ++ ) {
this.morphColors[ i ] = [];
}
//
for ( var i = 0; i < faces.length; i ++ ) {
var face = faces[ i ];
......@@ -135,6 +170,32 @@ THREE.DirectGeometry.prototype = {
}
// morphs
for ( var j = 0; j < morphTargetsLength; j ++ ) {
var morph = morphTargets[ j ].vertices;
this.morphTargets[ j ].push( morph[ face.a ], morph[ face.b ], morph[ face.c ] );
}
for ( var j = 0; j < morphNormalsLength; j ++ ) {
var morph = morphNormals[ j ].normals;
this.morphNormals[ j ].push( morph[ face.a ], morph[ face.b ], morph[ face.c ] );
}
for ( var j = 0; j < morphColorsLength; j ++ ) {
var morph = morphColors[ j ].colors;
this.morphColors[ j ].push( morph[ face.a ], morph[ face.b ], morph[ face.c ] );
}
}
this.verticesNeedUpdate = geometry.verticesNeedUpdate;
......@@ -145,14 +206,8 @@ THREE.DirectGeometry.prototype = {
return this;
/*
if ( geometry.morphTargets ) this.morphTargets = geometry.morphTargets.slice( 0 );
if ( geometry.morphColors ) this.morphColors = geometry.morphColors.slice( 0 );
if ( geometry.morphNormals ) this.morphNormals = geometry.morphNormals.slice( 0 );
if ( geometry.skinIndices ) this.skinIndices = geometry.skinIndices.slice( 0 );
if ( geometry.skinWeights ) this.skinWeights = geometry.skinWeights.slice( 0 );
return this;
*/
},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册