如何在Blender中反向矩阵变换?

0 投票
1 回答
2029 浏览
提问于 2025-04-16 07:50

我有一个选中的网格(我随便叫它“selected”),我想在它的本地空间里进行操作,所以我用了下面的代码:

    tmesh = NMesh.GetRawFromObject(selected.name)
    tmesh.transform(selected.matrix)

接着,我对它的顶点进行了一些计算,并通过索引把它们移除,这个过程很顺利。

但是,当我尝试从一个顶点列表中把它们再加回来时,就出现了问题。它们虽然在彼此之间的位置是正确的,但却离原来的顶点远得很。

            for v in tmesh.verts:
                 toAdd.append(v.co)
              mesh = selected.getData(mesh=1)
              mesh.verts.extend(toAdd)

我意识到这是因为对象处于不同的空间。所以我觉得我需要把新的顶点转换回旧的空间……但我对这里到底发生了什么的理解并不清晰。我该如何“撤销” tmesh.transform(selected.matrix) 这个命令呢?

如果想了解我在做什么的更详细解释,可以查看这里:http://www.kellbot.com/2010/11/lego-plans-now-with-better-rendering/

1 个回答

1

我对Blender不是很熟悉,不过我快速看了一下文档,原则上来说,你应该可以使用invert()这个Matrix方法来获取selected.matrix的反向变换(也许在这之前你需要先用copy()方法复制一份它)。

撰写回答