簡體   English   中英

CATransform3DMakeRotation和CATransform3DRotate之間的區別

[英]Difference between CATransform3DMakeRotation and CATransform3DRotate

我正在查看CATransform3DMakeRotationCATransform3DRotate的官方文檔,我無法理解它們的區別。 有人使用CATransform3DMakeRotationCATransform3DRotate在哪里?

您可以使用4 x 4矩陣表示各種3D變換,包括平移,縮放,旋轉,傾斜和透視。

您可以通過將表示每個單獨變換的矩陣相乘來在單個矩陣中表示多個連續變換。

CATransform3DMakeRotation創建一個表示單個變換的矩陣:圍繞給定軸旋轉給定角度。

CATransform3DRotateCATransform3DMakeRotation一樣創建一個矩陣,然后將該矩陣乘以另一個矩陣,從而將旋轉添加到現有的變換序列中。

所以你真的只需要一個或另一個。 如果您有一個,您可以輕松定義另一個。

你可以寫CATransform3DRotate使用CATransform3DMakeRotation是這樣的:

func CATransform3DRotate(_ t: CATransform3D, _ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    let rotation = CATransform3DMakeRotation(angle, x, y, z)
    return CATransform3DConcat(rotation, t)
}

CATransform3DConcat返回兩個矩陣的乘積。

或者,你可以寫CATransform3DMakeRotation使用CATransform3DRotate是這樣的:

func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
    return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}

CATransform3DIdentity是單位矩陣,完全不代表轉換。

如果您想了解有關轉換矩陣的更多信息,如何構建和組合它們,以及為什么需要4x4矩陣進行3D轉換,請將homogeneous coordinates 3d輸入到您最喜歡的搜索引擎中。

CATransform3DMakeRotation創建一個新的轉換。

CATransform3DRotate采用現有變換並旋轉它。

如果你只是想旋轉,那真的沒有什么不同。 但是如果你需要縮放,然后旋轉,然后翻譯,那么最后可能會有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM