【问题标题】:How to calculate the conversion matrix of two meshes如何计算两个网格的转换矩阵
【发布时间】:2021-02-05 09:20:17
【问题描述】:

我有两个相同的网格物体,但是它们的位置和旋转方向不同;我知道两个网格顶点的位置信息,如何得到它们之间的相对变换矩阵

【问题讨论】:

  • 欢迎来到SO bimPaoHui,请阅读How to Ask 并发送tour 了解SO。在这里提出问题时,最好提供更多信息,例如最小可重复输入和预期输出。

标签: math matrix mesh


【解决方案1】:
  1. 为每个对象获取或构造homogenuous transform matrix

    我们称它们为a,b,对应于网格A,B

  2. 计算差分矩阵d

    例如,您想从A 转到B,那么只需解决问题:

               a*d = b
    Inverse(a)*a*d = Inverse(a)*b
                 d = Inverse(a)*b
    

    请注意,如果您使用不同的符号(例如逆序的乘法和/或逆矩阵,而不是直接的矩阵,则方程可能会倒置或转置)

这里还有另一个例子:

【讨论】:

  • 你提到的情况是旋转位移存在于转换矩阵中,但两个网格转换矩阵实际上是单位矩阵,角度和位置信息在几何结构信息中。
  • 《Problem superimposing and aligning 3D triangles》这个看起来和我的问题差不多,我试试,谢谢
  • @bimPaoHui 如果网格的拓扑相同(我的意思是两个网格中的点顺序相同,因此第 i 个点对应于两个网格上的同一点),而不仅仅是 pic 3 点不在单行上(例如第一个面的 3 个点)构造矩阵并计算它们之间的差异。但是,如果网格具有不同的拓扑结构,您首先必须匹配它们(例如使用 3D OBB ... 或搜索特定特征)
  • for (m=lroty(ma,float(-0.5*M_PI)),b=0;b
  • @bimPaoHui 是的mat4vec4 的4 个元素数组,.xyz 正在从vec4 访问vec3,就像在GLSL 中一样(它的语法相同,花了我一段时间对?mat?,?vec? 类进行编码,使其行为和语法相同)
猜你喜欢
  • 2015-05-17
  • 1970-01-01
  • 2020-07-09
  • 2022-01-26
  • 1970-01-01
  • 2012-11-06
  • 2017-01-02
  • 1970-01-01
  • 2018-05-02
相关资源
最近更新 更多