|
@@ -599,6 +599,12 @@
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if ( 'LayerElementColor' in geometryNode.subNodes ) {
|
|
|
|
+
|
|
|
|
+ var colorInfo = getColors( geometryNode );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
if ( 'LayerElementMaterial' in geometryNode.subNodes ) {
|
|
if ( 'LayerElementMaterial' in geometryNode.subNodes ) {
|
|
|
|
|
|
var materialInfo = getMaterials( geometryNode );
|
|
var materialInfo = getMaterials( geometryNode );
|
|
@@ -698,6 +704,12 @@
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if ( colorInfo ) {
|
|
|
|
+
|
|
|
|
+ vertex.color.fromArray( getData( polygonVertexIndex, polygonIndex, vertexIndex, colorInfo ) );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
faceVertexBuffer.push( vertex );
|
|
faceVertexBuffer.push( vertex );
|
|
|
|
|
|
if ( endOfFace ) {
|
|
if ( endOfFace ) {
|
|
@@ -733,6 +745,11 @@
|
|
|
|
|
|
geo.addAttribute( 'uv', new THREE.BufferAttribute( new Float32Array( bufferInfo.uvBuffer ), 2 ) );
|
|
geo.addAttribute( 'uv', new THREE.BufferAttribute( new Float32Array( bufferInfo.uvBuffer ), 2 ) );
|
|
|
|
|
|
|
|
+ }
|
|
|
|
+ if ( bufferInfo.colorsBuffer.length > 0 ) {
|
|
|
|
+
|
|
|
|
+ geo.addAttribute( 'color', new THREE.BufferAttribute( new Float32Array( bufferInfo.colorsBuffer ), 4 ) );
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
if ( deformer ) {
|
|
if ( deformer ) {
|
|
@@ -828,6 +845,35 @@
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Parses Vertex Color information for geometry.
|
|
|
|
+ * @param {FBXGeometryNode} geometryNode
|
|
|
|
+ * @returns {{dataSize: number, buffer: number[], indices: number[], mappingType: string, referenceType: string}}
|
|
|
|
+ */
|
|
|
|
+ function getColors( geometryNode ) {
|
|
|
|
+
|
|
|
|
+ var ColorNode = geometryNode.subNodes.LayerElementColor[ 0 ];
|
|
|
|
+
|
|
|
|
+ var mappingType = ColorNode.properties.MappingInformationType;
|
|
|
|
+ var referenceType = ColorNode.properties.ReferenceInformationType;
|
|
|
|
+ var buffer = parseFloatArray( ColorNode.subNodes.Colors.properties.a );
|
|
|
|
+ var indexBuffer = [];
|
|
|
|
+ if ( referenceType === 'IndexToDirect' ) {
|
|
|
|
+
|
|
|
|
+ indexBuffer = parseFloatArray( ColorNode.subNodes.ColorIndex.properties.a );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return {
|
|
|
|
+ dataSize: 4,
|
|
|
|
+ buffer: buffer,
|
|
|
|
+ indices: indexBuffer,
|
|
|
|
+ mappingType: mappingType,
|
|
|
|
+ referenceType: referenceType
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Parses material application information for geometry.
|
|
* Parses material application information for geometry.
|
|
* @param {FBXGeometryNode}
|
|
* @param {FBXGeometryNode}
|
|
@@ -1399,7 +1445,7 @@
|
|
|
|
|
|
/**
|
|
/**
|
|
* @type {{
|
|
* @type {{
|
|
- curves: Map<number, {
|
|
|
|
|
|
+ curves: Map<number, {
|
|
T: {
|
|
T: {
|
|
id: number;
|
|
id: number;
|
|
attr: string;
|
|
attr: string;
|
|
@@ -1519,7 +1565,7 @@
|
|
}
|
|
}
|
|
}>,
|
|
}>,
|
|
layers: Map<number, {
|
|
layers: Map<number, {
|
|
- T: {
|
|
|
|
|
|
+ T: {
|
|
id: number;
|
|
id: number;
|
|
attr: string;
|
|
attr: string;
|
|
internalID: number;
|
|
internalID: number;
|
|
@@ -1943,7 +1989,7 @@
|
|
|
|
|
|
/**
|
|
/**
|
|
* @type {{
|
|
* @type {{
|
|
- T: {
|
|
|
|
|
|
+ T: {
|
|
id: number;
|
|
id: number;
|
|
attr: string;
|
|
attr: string;
|
|
internalID: number;
|
|
internalID: number;
|
|
@@ -3084,6 +3130,12 @@
|
|
*/
|
|
*/
|
|
this.uv = new THREE.Vector2( );
|
|
this.uv = new THREE.Vector2( );
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Color of the vertex
|
|
|
|
+ * @type {THREE.Vector4}
|
|
|
|
+ */
|
|
|
|
+ this.color = new THREE.Vector4();
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Indices of the bones vertex is influenced by.
|
|
* Indices of the bones vertex is influenced by.
|
|
* @type {THREE.Vector4}
|
|
* @type {THREE.Vector4}
|
|
@@ -3119,6 +3171,7 @@
|
|
var vertexBuffer = this.position.toArray();
|
|
var vertexBuffer = this.position.toArray();
|
|
var normalBuffer = this.normal.toArray();
|
|
var normalBuffer = this.normal.toArray();
|
|
var uvBuffer = this.uv.toArray();
|
|
var uvBuffer = this.uv.toArray();
|
|
|
|
+ var colorBuffer = this.color.toArray();
|
|
var skinIndexBuffer = this.skinIndices.toArray();
|
|
var skinIndexBuffer = this.skinIndices.toArray();
|
|
var skinWeightBuffer = this.skinWeights.toArray();
|
|
var skinWeightBuffer = this.skinWeights.toArray();
|
|
|
|
|
|
@@ -3126,6 +3179,7 @@
|
|
vertexBuffer: vertexBuffer,
|
|
vertexBuffer: vertexBuffer,
|
|
normalBuffer: normalBuffer,
|
|
normalBuffer: normalBuffer,
|
|
uvBuffer: uvBuffer,
|
|
uvBuffer: uvBuffer,
|
|
|
|
+ colorBuffer: colorBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
};
|
|
};
|
|
@@ -3167,6 +3221,7 @@
|
|
var vertexBuffer = [];
|
|
var vertexBuffer = [];
|
|
var normalBuffer = [];
|
|
var normalBuffer = [];
|
|
var uvBuffer = [];
|
|
var uvBuffer = [];
|
|
|
|
+ var colorsBuffer = [];
|
|
var skinIndexBuffer = [];
|
|
var skinIndexBuffer = [];
|
|
var skinWeightBuffer = [];
|
|
var skinWeightBuffer = [];
|
|
|
|
|
|
@@ -3178,6 +3233,7 @@
|
|
vertexBuffer = vertexBuffer.concat( flatVertex.vertexBuffer );
|
|
vertexBuffer = vertexBuffer.concat( flatVertex.vertexBuffer );
|
|
normalBuffer = normalBuffer.concat( flatVertex.normalBuffer );
|
|
normalBuffer = normalBuffer.concat( flatVertex.normalBuffer );
|
|
uvBuffer = uvBuffer.concat( flatVertex.uvBuffer );
|
|
uvBuffer = uvBuffer.concat( flatVertex.uvBuffer );
|
|
|
|
+ colorsBuffer = colorsBuffer.concat( flatVertex.colorBuffer );
|
|
skinIndexBuffer = skinIndexBuffer.concat( flatVertex.skinIndexBuffer );
|
|
skinIndexBuffer = skinIndexBuffer.concat( flatVertex.skinIndexBuffer );
|
|
skinWeightBuffer = skinWeightBuffer.concat( flatVertex.skinWeightBuffer );
|
|
skinWeightBuffer = skinWeightBuffer.concat( flatVertex.skinWeightBuffer );
|
|
|
|
|
|
@@ -3187,6 +3243,7 @@
|
|
vertexBuffer: vertexBuffer,
|
|
vertexBuffer: vertexBuffer,
|
|
normalBuffer: normalBuffer,
|
|
normalBuffer: normalBuffer,
|
|
uvBuffer: uvBuffer,
|
|
uvBuffer: uvBuffer,
|
|
|
|
+ colorsBuffer: colorsBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
};
|
|
};
|
|
@@ -3245,6 +3302,7 @@
|
|
var vertexBuffer = [];
|
|
var vertexBuffer = [];
|
|
var normalBuffer = [];
|
|
var normalBuffer = [];
|
|
var uvBuffer = [];
|
|
var uvBuffer = [];
|
|
|
|
+ var colorsBuffer = [];
|
|
var skinIndexBuffer = [];
|
|
var skinIndexBuffer = [];
|
|
var skinWeightBuffer = [];
|
|
var skinWeightBuffer = [];
|
|
|
|
|
|
@@ -3259,6 +3317,7 @@
|
|
vertexBuffer = vertexBuffer.concat( flatTriangle.vertexBuffer );
|
|
vertexBuffer = vertexBuffer.concat( flatTriangle.vertexBuffer );
|
|
normalBuffer = normalBuffer.concat( flatTriangle.normalBuffer );
|
|
normalBuffer = normalBuffer.concat( flatTriangle.normalBuffer );
|
|
uvBuffer = uvBuffer.concat( flatTriangle.uvBuffer );
|
|
uvBuffer = uvBuffer.concat( flatTriangle.uvBuffer );
|
|
|
|
+ colorsBuffer = colorsBuffer.concat( flatTriangle.colorsBuffer );
|
|
skinIndexBuffer = skinIndexBuffer.concat( flatTriangle.skinIndexBuffer );
|
|
skinIndexBuffer = skinIndexBuffer.concat( flatTriangle.skinIndexBuffer );
|
|
skinWeightBuffer = skinWeightBuffer.concat( flatTriangle.skinWeightBuffer );
|
|
skinWeightBuffer = skinWeightBuffer.concat( flatTriangle.skinWeightBuffer );
|
|
materialIndexBuffer = materialIndexBuffer.concat( [ materialIndex, materialIndex, materialIndex ] );
|
|
materialIndexBuffer = materialIndexBuffer.concat( [ materialIndex, materialIndex, materialIndex ] );
|
|
@@ -3269,6 +3328,7 @@
|
|
vertexBuffer: vertexBuffer,
|
|
vertexBuffer: vertexBuffer,
|
|
normalBuffer: normalBuffer,
|
|
normalBuffer: normalBuffer,
|
|
uvBuffer: uvBuffer,
|
|
uvBuffer: uvBuffer,
|
|
|
|
+ colorsBuffer: colorsBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
materialIndexBuffer: materialIndexBuffer
|
|
materialIndexBuffer: materialIndexBuffer
|
|
@@ -3305,6 +3365,7 @@
|
|
var vertexBuffer = [];
|
|
var vertexBuffer = [];
|
|
var normalBuffer = [];
|
|
var normalBuffer = [];
|
|
var uvBuffer = [];
|
|
var uvBuffer = [];
|
|
|
|
+ var colorsBuffer = [];
|
|
var skinIndexBuffer = [];
|
|
var skinIndexBuffer = [];
|
|
var skinWeightBuffer = [];
|
|
var skinWeightBuffer = [];
|
|
|
|
|
|
@@ -3317,6 +3378,7 @@
|
|
vertexBuffer = vertexBuffer.concat( flatFace.vertexBuffer );
|
|
vertexBuffer = vertexBuffer.concat( flatFace.vertexBuffer );
|
|
normalBuffer = normalBuffer.concat( flatFace.normalBuffer );
|
|
normalBuffer = normalBuffer.concat( flatFace.normalBuffer );
|
|
uvBuffer = uvBuffer.concat( flatFace.uvBuffer );
|
|
uvBuffer = uvBuffer.concat( flatFace.uvBuffer );
|
|
|
|
+ colorsBuffer = colorsBuffer.concat( flatFace.colorsBuffer );
|
|
skinIndexBuffer = skinIndexBuffer.concat( flatFace.skinIndexBuffer );
|
|
skinIndexBuffer = skinIndexBuffer.concat( flatFace.skinIndexBuffer );
|
|
skinWeightBuffer = skinWeightBuffer.concat( flatFace.skinWeightBuffer );
|
|
skinWeightBuffer = skinWeightBuffer.concat( flatFace.skinWeightBuffer );
|
|
materialIndexBuffer = materialIndexBuffer.concat( flatFace.materialIndexBuffer );
|
|
materialIndexBuffer = materialIndexBuffer.concat( flatFace.materialIndexBuffer );
|
|
@@ -3327,6 +3389,7 @@
|
|
vertexBuffer: vertexBuffer,
|
|
vertexBuffer: vertexBuffer,
|
|
normalBuffer: normalBuffer,
|
|
normalBuffer: normalBuffer,
|
|
uvBuffer: uvBuffer,
|
|
uvBuffer: uvBuffer,
|
|
|
|
+ colorsBuffer: colorsBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinIndexBuffer: skinIndexBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
skinWeightBuffer: skinWeightBuffer,
|
|
materialIndexBuffer: materialIndexBuffer
|
|
materialIndexBuffer: materialIndexBuffer
|