[英]Understanding CATransform3DRotate / CATransform3DMakeRotation
[英]Difference between CATransform3DMakeRotation and CATransform3DRotate
我正在查看CATransform3DMakeRotation和CATransform3DRotate的官方文檔,我無法理解它們的區別。 有人使用CATransform3DMakeRotation
和CATransform3DRotate
在哪里?
您可以使用4 x 4矩陣表示各種3D變換,包括平移,縮放,旋轉,傾斜和透視。
您可以通過將表示每個單獨變換的矩陣相乘來在單個矩陣中表示多個連續變換。
CATransform3DMakeRotation
創建一個表示單個變換的矩陣:圍繞給定軸旋轉給定角度。
CATransform3DRotate
像CATransform3DMakeRotation
一樣創建一個矩陣,然后將該矩陣乘以另一個矩陣,從而將旋轉添加到現有的變換序列中。
所以你真的只需要一個或另一個。 如果您有一個,您可以輕松定義另一個。
你可以寫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.