libgdx: ModelInstance.transform.setToTranslation(..) 和 ModelInstance.transform.translate(..) 有什么区别?

libgdx: What is the difference between ModelInstance.transform.setToTranslation(..) and ModelInstance.transform.translate(..)?

有什么区别:

myModel.transform.SetToTranslation( *some Vector3* )

myModel.transform.translate( *some Vector3* )

(其中 myModel 的类型是 ModelInstance)

具体来说,这些操作的副作用是什么?

对我来说最重要的是,在哪些典型用例中您会使用一种方法而不是另一种方法?

SetToTranslation 将 4x4 矩阵设置为单位矩阵,然后将第四列设置为传入的翻译矩阵。

translate post 将矩阵与平移向量相乘。

没有花哨的词,这意味着 SetToTranslation 删除了所有旋转并将模型设置在您给它的坐标上,并且平移将模型从您与它相乘的当前位置移动。

当你想把一个模型放在一个特定的坐标上时,可以使用 SetToTranslation,而如果你想平滑地移动你的模型,translate 会更好。

setToTranslation 将矩阵设置为翻译。换句话说,它删除矩阵在调用之前进行的所有变换(例如任何平移、旋转和缩放),然后将其设置为具有指定值的平移矩阵。

translatepost-乘以 矩阵的当前变换与包含给定翻译的翻译矩阵,结果是:

transform.translate(x,y,z) == transform.mul(tempMatrix.setToTranslation(x,y,z))

使用 translate(这是矩阵数学而不是 libgdx 特有的)的主要副作用是它之前的任何转换都可能(将)影响翻译。

这篇 post 可能对您有所帮助:http://badlogicgames.com/forum/viewtopic.php?f=11&t=17878&p=75338#p75338