如何偏移3D转换矩阵?

时间:2019-01-20 23:55:38

标签: opengl glsl webgl affinetransform

问题的上下文是,我正在一个3D项目中,该项目使用单独的工具来进行网格数据和动画数据导出。这些工具的起点不同。

  • 以0,0,0作为网格AABB的左下对齐点导出网格。
  • 动画以x,z为中心,底部以y为准。

我最近介绍了一种物理引擎,该引擎使用单独的,完全居中的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中心且不与底部对齐,然后重新导出关节矩阵

0 个答案:

没有答案