问题的上下文是,我正在一个3D项目中,该项目使用单独的工具来进行网格数据和动画数据导出。这些工具的起点不同。
我最近介绍了一种物理引擎,该引擎使用单独的,完全居中的0,0,0刚体空间。
我正在使用物理引擎作为真理的来源,并尝试相应地转换不同的原点。
我当前的垂直位置计算如下:
gl_Position = projection * view * model * joint * (centerOffset * vec4(position.xyz, 1));
我将一系列变换矩阵应用于3D顶点。
position.xyz
是原始版本位置
centerOffset
是平移变换,可将顶点偏移到以0,0,0为中心的AABB中它们各自的位置。
joint
是Blender导出的联合动画的变换矩阵。
model
是世界位置和旋转矩阵
此方法遇到的问题是,现在顶点已正确地位于model
世界位置的中心,但是当应用联合动画时,它会失真,因为动画joint
矩阵是从+ Y偏移,并且网格数据以Y:0居中
我在这里希望做的是使joint
矩阵偏移,使它们处于0,0,0中心顶点的正确Y范围内。
我尝试将joint
矩阵与Y偏移平移矩阵相乘,但最终将整个扭曲的顶点集偏移新的偏移,而不是特定的联合变换。
基本上,我需要执行以下等效操作:进入Blender并手动将所有关节沿Y轴向下移动,使它们位于Y中心且不与底部对齐,然后重新导出关节矩阵