我正在使用Assimp.net将动画的.dae文件导入到我的OpenTK引擎中,并努力建立可用的层次骨骼结构。
在我跟踪的tutorial中,根骨骼或“关节”包含其子关节的列表,以及其子关节的列表,依此类推。
Assimp返回每个导入的Mesh
对象,其中包含Bone
对象的列表,并具有骨骼的Name
,OffsetMatrix
和VertexWeights
的含义,但是关于它的子元素什么都没有或父骨头。
包含Scene
的{{1}}确实有一个总计Mesh
的列表(其中一些是骨骼),并且确实具有nodes
的值,但是通过递归比较检查的层次结构很快变得混乱不堪,而且远不能发挥作用。
如何隔离根骨,然后是孩子,然后是孩子,等等?
答案 0 :(得分:1)
找出每个节点包含其子集的{em>集合,它们的子集类型为this.payment = new PayPalPayment('1', 'INR', 'sale', 'TV');
this.payPal.init({
PayPalEnvironmentProduction: '',
PayPalEnvironmentSandbox: 'token'
}).then(() => {
this.payPal.prepareToRender(this.payPalEnvironment, new PayPalConfiguration({})).then(() => {
this.payPal.renderSinglePaymentUI(this.payment).then((response) => {
// alert(`Successfully paid. Status = ${response.response.state}`);
}, (err) => {
console.error('Error or render dialog closed without being successful', err);
});
}, () => {
console.error('Error in configuration');
});
}, () => {
console.error('Error in initialization, maybe PayPal isn\'t supported or something else');
});
的{{1}},然后我开发了以下解决方案。
要找到根骨骼,请对children
中的每个NodeCollection
进行遍历,并检查是否在{中包含的node
列表中找到了它的名称{1}},然后如果该scene
的父名称不在bones
列表中,则它必须是根骨骼。
要构建骨骼层次结构,请从上面找到的“根骨骼”节点获取mesh
,然后在网格物体node
列表中找到匹配的名称,并从在那里提取所需的顶点权重和偏移矩阵。接下来,使用与上述相同的方法递归搜索这些子级的子级:遍历场景中的每个bones
直到找到匹配的children
名称,然后从{{1}中提取数据} bones
列表中,然后相反地进行操作,直到没有子项为止。
如果有更好的方法,我很想听听。