- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在一个场景中有多个相同的动画模型。如果可能的话,我希望它们具有共享的几何形状和 Material ,但如果不可能,让它们为每个模型实例化也足够了。
不幸的是,我发现实现这个结果的唯一方法是对每个模型实例都使用 JSONLoader。
SkinnedMesh 确实有一个 clone() 方法,但它似乎还没有完全实现。如果使用并且场景中同时存在原始网格和克隆网格,则只会出现一个,而克隆的网格将没有动画。
我尝试将此示例与共享骨架一起使用:
https://github.com/mrdoob/three.js/pull/11666
...确实它有效,但我需要能够为每个模型实例播放不同的动画,让它们都播放相同的动画是不够的,遗憾的是。我希望我可以做类似的 hax 并插入我自己的骨架(由 JSON 文件中的骨头制成),但它的行为非常类似于我只使用 SkinnedMesh 中的 clone()。
我正在使用这段代码:
https://github.com/arturitu/threejs-animation-workflow/blob/master/js/main.js
基本上我想要实现的是
var onLoad = function (geometry, materials) {
window.geometry = geometry;
character = new THREE.SkinnedMesh(
geometry,
new THREE.MeshFaceMaterial(materials)
);
character2 = character.someMagicalClone();
scene.add(character);
scene.add(character2);
(...)
最佳答案
我在这个拉取请求中找到了一个解决方案:
https://github.com/mrdoob/three.js/pull/14494
简而言之,增加了两个功能:
function cloneAnimated( source ) {
var cloneLookup = new Map();
var clone = source.clone();
parallelTraverse( source, clone, function ( sourceNode, clonedNode ) {
cloneLookup.set( sourceNode, clonedNode );
} );
source.traverse( function ( sourceMesh ) {
if ( ! sourceMesh.isSkinnedMesh ) return;
var sourceBones = sourceMesh.skeleton.bones;
var clonedMesh = cloneLookup.get( sourceMesh );
clonedMesh.skeleton = sourceMesh.skeleton.clone();
clonedMesh.skeleton.bones = sourceBones.map( function ( sourceBone ) {
if ( ! cloneLookup.has( sourceBone ) ) {
throw new Error( 'THREE.AnimationUtils: Required bones are not descendants of the given object.' );
}
return cloneLookup.get( sourceBone );
} );
clonedMesh.bind( clonedMesh.skeleton, sourceMesh.bindMatrix );
} );
return clone;
}
function parallelTraverse( a, b, callback ) {
callback( a, b );
for ( var i = 0; i < a.children.length; i ++ ) {
parallelTraverse( a.children[ i ], b.children[ i ], callback );
}
}
var onLoad = function (geometry, materials) {
window.geometry = geometry;
character = new THREE.SkinnedMesh(
geometry,
new THREE.MeshFaceMaterial(materials)
);
character2 = cloneAnimated(character); // <-- used that new function
scene.add(character);
scene.add(character2);
(...)
关于animation - 如何克隆蒙皮网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393765/
我在我的应用程序中实现了换肤。应用程序加载其 Brushes.xaml 资源字典,该字典使用驻留在特定于皮肤的资源字典中的颜色。因此,根据所选的皮肤,仅加载一个 Color.xaml。 皮肤特定颜色.
我希望你能帮助我。我的问题是 collada 的蒙皮方程: v += {[(v * BSM) * IBMi * JMi] * JW} n:影响顶点v的关节数 BSM:绑定(bind)形状矩阵 IBMi
好的,所以我的目的是“美化”我正在处理的 UI。我熟悉使用 GDI+ 手动绘制控件,但我今天的目标只是直接在我的 DC 上使用 BitBlitting png。 这与主框架、一些按钮和一些菜单一起工作
我刚刚开始使用 DNN 皮肤,对 skin.css 的工作原理感到困惑。我使用的是“传统”换肤方法,所以我的皮肤文件夹中有 SkinName.htm 文件,每次更改它时我都会让 DNN 解析它。现在我
我是一名优秀的程序员,十分优秀!