三.js r74 JSONLoader 将所有几何图形的副本绑定到第一个骨骼
Three.js r74 JSONLoader binds duplicate of all geometry to first bone
我正在重写这个问题,因为我现在对这个错误有了更多的了解。看起来在 r74 中使用 JSONLoader 时,导出的 Maya 场景中的第一个命名骨骼会获得所有几何体的副本。
编辑:这是一个JSFiddle
在这个例子中,我有 2 个盒子。每个框都绑定到单个骨骼,并且每个骨骼中的每一个都有用于对位置和旋转进行动画处理的关键帧。还有另一块骨骼没有绑定几何图形,并且具有不更改其位置或旋转的关键帧。
静止骨骼在玛雅语中称为"joint1"。实际上绑定了几何形状的骨骼称为"关节2"和"关节3"。如果我将静止的骨骼重命名为"joint4",结果将是附加到当前动画"joint2"的两个框的副本。
我的猜测是,要么这是一个错误,要么我在加载动画时做错了什么。任何提示将不胜感激。我现在能想到的唯一解决方法是将每个动画对象分离到一个单独的文件中,这确实不可行。另外,当我有一个多骨骨架时,这并不能解决问题。此示例只是没有实际变形的单骨钻机。
这是我当前的加载程序代码。
//Load Scene, Materials, and Animation
var mixer, mesh;
var actions = {};
var sceneLoader = new THREE.JSONLoader();
sceneLoader.load( sceneFile, function( geometry,materials ) {
materials.forEach( function( material ){
material.skinning = true;
});
mesh = new THREE.SkinnedMesh( geometry, new THREE.MeshFaceMaterial( materials ) );
mixer = new THREE.AnimationMixer( mesh );
actions.main = mixer.clipAction( geometry.animations[ 0 ]);
actions.main.setEffectiveWeight( 1 );
actions.main.play();
scene.add( mesh );
});
//Render
var render = function () {
requestAnimationFrame( render );
controls.update;
var delta = clock.getDelta();
var theta = clock.getElapsedTime();
if ( mixer ) { mixer.update( delta ); }
renderer.render(scene, camera)
}
render();
这仍然是一个问题,但我找到了一个不错的解决方法。
由于复制的几何体始终被分配默认的朗伯着色器,因此在使用Maya导出器时始终包含该着色器。只要要保留的所有对象都具有 Maya 中默认材质以外的材质,就可以插入
mesh.material.materials[0].visible = false;
进入加载器代码,这将使任何具有默认朗伯的材料不可见。
这是一个小提琴
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- Telerik rad组合框多列数据绑定
- 对API数据使用声明性绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 数据绑定:'系统Char'不包含名为'xxxxx'
- react组件中的绑定方法
- 如何将ngrepeat下的ngmodel绑定到$scope
- WinJS内联绑定语法
- 三.js r74 JSONLoader 将所有几何图形的副本绑定到第一个骨骼
- 如何在Vue.js中解绑定数组副本