我的矩阵数学非常生疏,如果使用曲线信息节点上的maya点的矢量正确计算3x3旋转矩阵,我有点迷失。我能够轻松获得4x4矩阵中的位置,因为这只是将位置向量放入正确的矩阵值。
我在谷歌上已经阅读了相当多的内容,但不同的消息来源似乎对如何正确构建它有不同的看法。
目前我认为我想构建一个这样的矩阵,但我不确定这是否正确:
TanU.x TanU.y TanU.z 0
Norm.x Norm.y Norm.z 0
TanV.x TanV.y TanV.z 0
pos.x pos.y pos.z 1
从我在曲线节点上的观点我有以下向量: 位置 正常 正切
我不知道如何获得tangentu和tangentv。认为这是基于计算网格法线时的u和v空间?
我试图获得类似于页面底部示例的结果,这只是为了开始,但是一旦我开始工作,我有一堆用于正确的4x4矩阵,这将有助于我出一吨:http://www.chrisevans3d.com/pub_blog/maya-python-vector-math-primer/#comment-191332
不幸的是,在这个例子中,你无法看到我真正需要的十字架产品。
非常感谢任何建议或帮助!
答案 0 :(得分:4)
如果你有曲线上的点的法线和切线,你只需要为你的第三个矢量设置这两个的交叉矢量。这些向量的顺序是常规驱动的,不是一成不变的 - 但为了获得良好的矩阵,你需要三个向量成直角的向量。
假设您有正常和切线:
from maya.api.OpenMaya import MVector, MMatrix
import maya.cmds as cmds
normal_vector = MVector(*cmds.getAttr('pointOnCurveInfo1.result.normal')).normal()
tangent_vector = MVector(*cmds.getAttr('pointOnCurveInfo1.result.tangent')).normal()
cross_vector = normal_vector ^ tangent_vector
position = MVector(*cmds.getAttr('pointOnCurveInfo1.result.position'))
matrix = (
tangent_vector[0], tangent_vector[1], tangent_vector[2], 0,
normal_vector [0], normal_vector [1], normal_vector[2], 0,
cross_vector[0], cross_vector[1], cross_vector[2], 0,
position[0], position[1], position[2], 1
)
# if you want it in api form so you can do multiplies, etc:
api_matrix = MMatrix(matrix)
api_matrix
如果你像克里斯的例子那样做,你需要一个与pointOnCurveInfo
正常和切线相连的CrossProduct节点做同样的事情< / p>