started slow refactor to break things down for easier understanding
This commit is contained in:
parent
dc7f84cdb9
commit
b4563afa6e
|
@ -0,0 +1,6 @@
|
||||||
|
charset = utf-8
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
tab_width = 2
|
||||||
|
trim_trailing_whitespace = true
|
File diff suppressed because one or more lines are too long
|
@ -1,45 +1,38 @@
|
||||||
import { Matrix4, Vector3, Vector4 } from "three";
|
import { Matrix4, Vector3, Vector4 } from "three";
|
||||||
|
|
||||||
var finalizeMesh = function() {};
|
let matrixRotation = new Matrix4().makeRotationX(90 * Math.PI / 180);
|
||||||
|
let matrixScale = new Matrix4().makeScale(10, 10, 10);
|
||||||
finalizeMesh.prototype = {
|
let vertex = new Vector3();
|
||||||
|
let geometry = mesh.geometry;
|
||||||
constructor: finalizeMesh,
|
|
||||||
|
|
||||||
parse: function (mesh) {
|
|
||||||
|
|
||||||
|
export function parse(mesh) {
|
||||||
if (!mesh.isMesh) {
|
if (!mesh.isMesh) {
|
||||||
console.warn('Mesh type unsupported', mesh);
|
console.warn('Mesh type unsupported', mesh);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var vertex = new Vector3();
|
|
||||||
var i, l = [];
|
|
||||||
var nbVertex = 0;
|
|
||||||
var geometry = mesh.geometry;
|
|
||||||
|
|
||||||
var mrot = new Matrix4().makeRotationX(90 * Math.PI / 180);
|
|
||||||
|
|
||||||
var msca = new Matrix4().makeScale(10, 10, 10);
|
|
||||||
if (geometry.isBufferGeometry) {
|
if (geometry.isBufferGeometry) {
|
||||||
var newGeometry = geometry.clone(geometry);
|
var newGeometry = geometry.clone(geometry);
|
||||||
var vertices = geometry.getAttribute('position');
|
var vertices = geometry.getAttribute('position');
|
||||||
|
|
||||||
// vertices
|
// vertices
|
||||||
if (vertices !== undefined) {
|
if (vertices !== undefined) {
|
||||||
for (i = 0, l = vertices.count; i < l; i++ , nbVertex++) {
|
let verticesCount = vertices.count;
|
||||||
|
for (let i = 0; i < verticesCount; i++) {
|
||||||
vertex.x = vertices.getX(i);
|
vertex.x = vertices.getX(i);
|
||||||
vertex.y = vertices.getY(i);
|
vertex.y = vertices.getY(i);
|
||||||
vertex.z = vertices.getZ(i);
|
vertex.z = vertices.getZ(i);
|
||||||
|
|
||||||
if (geometry.skinIndexNames == undefined
|
if (geometry.skinIndexNames == undefined || geometry.skinIndexNames == 0) {
|
||||||
|| geometry.skinIndexNames == 0) {
|
vertex
|
||||||
vertex.applyMatrix4(mesh.matrixWorld).applyMatrix4(mrot).applyMatrix4(msca);
|
.applyMatrix4(mesh.matrixWorld)
|
||||||
|
.applyMatrix4(matrixRotation)
|
||||||
|
.applyMatrix4(matrixScale);
|
||||||
newGeometry.attributes.position.setXYZ(i, vertex.x, vertex.y, vertex.z);
|
newGeometry.attributes.position.setXYZ(i, vertex.x, vertex.y, vertex.z);
|
||||||
} else {
|
} else {
|
||||||
var finalVector = new Vector4();
|
var finalVector = new Vector4();
|
||||||
if (geometry.morphTargetInfluences !== undefined) {
|
if (geometry.morphTargetInfluences !== undefined) {
|
||||||
|
|
||||||
var morphVector = new Vector4(vertex.x, vertex.y, vertex.z);
|
var morphVector = new Vector4(vertex.x, vertex.y, vertex.z);
|
||||||
var tempMorph = new Vector4();
|
var tempMorph = new Vector4();
|
||||||
|
|
||||||
|
@ -57,50 +50,8 @@ finalizeMesh.prototype = {
|
||||||
morphVector.add(tempMorph);
|
morphVector.add(tempMorph);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var si = 0; si < geometry.skinIndexNames.length; si++) {
|
for (let j = 0; j < geometry.skinIndexNames.length; j++) {
|
||||||
|
newFunction_1(geometry, i, j, mesh, morphVector, finalVector);
|
||||||
var skinIndices = geometry.getAttribute([geometry.skinIndexNames[si]])
|
|
||||||
var weights = geometry.getAttribute([geometry.skinWeightNames[si]])
|
|
||||||
|
|
||||||
var skinIndex = [];
|
|
||||||
skinIndex[0] = skinIndices.getX(i);
|
|
||||||
skinIndex[1] = skinIndices.getY(i);
|
|
||||||
skinIndex[2] = skinIndices.getZ(i);
|
|
||||||
skinIndex[3] = skinIndices.getW(i);
|
|
||||||
|
|
||||||
var skinWeight = [];
|
|
||||||
skinWeight[0] = weights.getX(i);
|
|
||||||
skinWeight[1] = weights.getY(i);
|
|
||||||
skinWeight[2] = weights.getZ(i);
|
|
||||||
skinWeight[3] = weights.getW(i);
|
|
||||||
|
|
||||||
var inverses = [];
|
|
||||||
inverses[0] = mesh.skeleton.boneInverses[skinIndex[0]];
|
|
||||||
inverses[1] = mesh.skeleton.boneInverses[skinIndex[1]];
|
|
||||||
inverses[2] = mesh.skeleton.boneInverses[skinIndex[2]];
|
|
||||||
inverses[3] = mesh.skeleton.boneInverses[skinIndex[3]];
|
|
||||||
|
|
||||||
var skinMatrices = [];
|
|
||||||
skinMatrices[0] = mesh.skeleton.bones[skinIndex[0]].matrixWorld;
|
|
||||||
skinMatrices[1] = mesh.skeleton.bones[skinIndex[1]].matrixWorld;
|
|
||||||
skinMatrices[2] = mesh.skeleton.bones[skinIndex[2]].matrixWorld;
|
|
||||||
skinMatrices[3] = mesh.skeleton.bones[skinIndex[3]].matrixWorld;
|
|
||||||
|
|
||||||
for (var k = 0; k < 4; k++) {
|
|
||||||
if (geometry.morphTargetInfluences !== undefined) {
|
|
||||||
var tempVector = new Vector4(morphVector.x, morphVector.y, morphVector.z);
|
|
||||||
} else {
|
|
||||||
var tempVector = new Vector4(vertex.x, vertex.y, vertex.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
tempVector.multiplyScalar(skinWeight[k]);
|
|
||||||
//the inverse takes the vector into local bone space
|
|
||||||
//which is then transformed to the appropriate world space
|
|
||||||
tempVector.applyMatrix4(inverses[k])
|
|
||||||
.applyMatrix4(skinMatrices[k])
|
|
||||||
.applyMatrix4(mrot).applyMatrix4(msca);
|
|
||||||
finalVector.add(tempVector);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
newGeometry.attributes.position.setXYZ(i, finalVector.x, finalVector.y, finalVector.z);
|
newGeometry.attributes.position.setXYZ(i, finalVector.x, finalVector.y, finalVector.z);
|
||||||
}
|
}
|
||||||
|
@ -112,6 +63,48 @@ finalizeMesh.prototype = {
|
||||||
|
|
||||||
return newGeometry;
|
return newGeometry;
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
export { finalizeMesh };
|
function newFunction_1(geometry, i, j, mesh, morphVector, finalVector) {
|
||||||
|
var skinIndices = geometry.getAttribute([geometry.skinIndexNames[j]]);
|
||||||
|
var weights = geometry.getAttribute([geometry.skinWeightNames[j]]);
|
||||||
|
var skinIndex = [];
|
||||||
|
skinIndex[0] = skinIndices.getX(i);
|
||||||
|
skinIndex[1] = skinIndices.getY(i);
|
||||||
|
skinIndex[2] = skinIndices.getZ(i);
|
||||||
|
skinIndex[3] = skinIndices.getW(i);
|
||||||
|
var skinWeight = [];
|
||||||
|
skinWeight[0] = weights.getX(i);
|
||||||
|
skinWeight[1] = weights.getY(i);
|
||||||
|
skinWeight[2] = weights.getZ(i);
|
||||||
|
skinWeight[3] = weights.getW(i);
|
||||||
|
var inverses = [];
|
||||||
|
inverses[0] = mesh.skeleton.boneInverses[skinIndex[0]];
|
||||||
|
inverses[1] = mesh.skeleton.boneInverses[skinIndex[1]];
|
||||||
|
inverses[2] = mesh.skeleton.boneInverses[skinIndex[2]];
|
||||||
|
inverses[3] = mesh.skeleton.boneInverses[skinIndex[3]];
|
||||||
|
var skinMatrices = [];
|
||||||
|
skinMatrices[0] = mesh.skeleton.bones[skinIndex[0]].matrixWorld;
|
||||||
|
skinMatrices[1] = mesh.skeleton.bones[skinIndex[1]].matrixWorld;
|
||||||
|
skinMatrices[2] = mesh.skeleton.bones[skinIndex[2]].matrixWorld;
|
||||||
|
skinMatrices[3] = mesh.skeleton.bones[skinIndex[3]].matrixWorld;
|
||||||
|
for (var k = 0; k < 4; k++) {
|
||||||
|
newFunction(geometry, morphVector, skinWeight, k, inverses, skinMatrices, finalVector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function newFunction(geometry, morphVector, skinWeight, k, inverses, skinMatrices, finalVector) {
|
||||||
|
var vectorToCopy = geometry.morphTargetInfluences !== undefined
|
||||||
|
? morphVector
|
||||||
|
: vertex;
|
||||||
|
var tempVector = new Vector4(vectorToCopy.x, vectorToCopy.y, vectorToCopy.z)
|
||||||
|
tempVector.multiplyScalar(skinWeight[k]);
|
||||||
|
//the inverse takes the vector into local bone space
|
||||||
|
//which is then transformed to the appropriate world space
|
||||||
|
tempVector
|
||||||
|
.applyMatrix4(inverses[k])
|
||||||
|
.applyMatrix4(skinMatrices[k])
|
||||||
|
.applyMatrix4(matrixRotation)
|
||||||
|
.applyMatrix4(matrixScale);
|
||||||
|
finalVector.add(tempVector);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,7 @@ import { OBJExporter } from 'three/examples/jsm/exporters/OBJExporter.js';
|
||||||
import { SubdivisionModifier } from 'three/examples/jsm/modifiers/SubdivisionModifier.js';
|
import { SubdivisionModifier } from 'three/examples/jsm/modifiers/SubdivisionModifier.js';
|
||||||
import { saveAs } from 'file-saver';
|
import { saveAs } from 'file-saver';
|
||||||
import jQuery from 'jquery';
|
import jQuery from 'jquery';
|
||||||
import { arrive } from 'arrive';
|
import * as exporter from './finalizeMesh.js';
|
||||||
import { finalizeMesh } from './finalizeMesh.js';
|
|
||||||
|
|
||||||
function save_stl() {
|
function save_stl() {
|
||||||
var smooth = jQuery('#subdivideSLT').val() > 0 ? jQuery('#subdivideSLT').val() : undefined;
|
var smooth = jQuery('#subdivideSLT').val() > 0 ? jQuery('#subdivideSLT').val() : undefined;
|
||||||
|
@ -98,7 +97,6 @@ function process(object3d, smooth, mirroredPose) {
|
||||||
object3d.traverseVisible(function (object) {
|
object3d.traverseVisible(function (object) {
|
||||||
if (object.isMesh) {
|
if (object.isMesh) {
|
||||||
|
|
||||||
var exporter = new finalizeMesh();
|
|
||||||
var geometry = exporter.parse(object);
|
var geometry = exporter.parse(object);
|
||||||
|
|
||||||
if (mirroredPose == true) {
|
if (mirroredPose == true) {
|
||||||
|
|
Loading…
Reference in New Issue