gpt4 book ai didi

Three.js - 将骨骼转换为几何体

转载 作者:行者123 更新时间:2023-12-02 20:22:28 25 4
gpt4 key购买 nike

应用bone的正确方法是什么?矩阵到顶点,以便实际几何图形在不使用 GPU 的情况下表示变换后的形状?

我有一个角色模型,我正在应用 skeleton为此,我想以不同的姿势进行 3D 打印,所以我想使用 STLExporter导出 3D 可打印文件,但它仅导出原始几何体。

如果可以scene.traverse()在每个SkinnedMeshgeometry.applyMatrix(???)以正确的顺序使用正确的骨骼矩阵,我应该能够导出应用了转换的 STL,对吗?

var objects = [];
var triangles = 0;
scene.traverse( function ( object ) {
if ( object.isMesh ) {
var geometry = object.geometry;
if ( geometry.isBufferGeometry ) {
geometry = new THREE.Geometry().fromBufferGeometry( geometry );
}
// TODO: Apply skeleton transform
if ( geometry.isGeometry ) {
triangles += geometry.faces.length;
objects.push( {
geometry: geometry,
matrixWorld: object.matrixWorld
} );
}
}
} );

最佳答案

看看这个拉取请求:https://github.com/mrdoob/three.js/pull/8953/files

特别是这部分:

THREE.SkinnedMesh.prototype.boneTransform = 
...snip...
for ( var i = 0; i < 4; i ++ ) {
+
+ var skinWeight = skinWeights[ properties[ i ] ];
+
+ if ( skinWeight != 0 ) {
+
+ var boneIndex = skinIndices[ properties[ i ] ];
+ tempMatrix.multiplyMatrices( this.skeleton.bones[ boneIndex ].matrixWorld, this.skeleton.boneInverses[ boneIndex ] );
+ result.add( temp.copy( clone ).applyMatrix4( tempMatrix ).multiplyScalar( skinWeight ) );
+
+ }
+
+ }

因此,要烘焙变形,您必须执行以下步骤:

  1. 遍历所有顶点
  2. 得到它们对应的skinIndicesskinWeights
  3. 获取每个顶点的关联骨骼及其权重
  4. 遍历所有骨骼
  5. 获取骨骼的变换矩阵并将其转换为Geometry
  6. 的坐标系
  7. 通过关联的skinWeights[boneIdx]
  8. 对矩阵进行加权
  9. 应用最终矩阵

编辑:修复问题的导出器版本。 ( https://github.com/mrdoob/three.js/blob/1be00d5ad075b2305b86c6385403d0e56b4621dd/examples/js/exporters/STLExporter.js )

关于Three.js - 将骨骼转换为几何体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51015987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com