有沒有辦法從CATransform3D投射到GLKMatrix4,還是我總是需要手動將它們從值轉換爲值? 我猜投射會更快。轉換GLKMatrix4和CATransform3D
回答
不幸的是,現在還沒有。 Apple最有可能通過隱藏的API調用通過CALayers和OpenGL進行轉換,但現在下面是您最好的選擇。我只想創建一個實用類來包含它。
- (GLKMatrix4)matrixFrom3DTransformation:(CATransform3D)transform
{
GLKMatrix4 matrix = GLKMatrix4Make(transform.m11, transform.m12, transform.m13, transform.m14,
transform.m21, transform.m22, transform.m23, transform.m24,
transform.m31, transform.m32, transform.m33, transform.m34,
transform.m41, transform.m42, transform.m43, transform.m44);
return matrix;
}
使用類似
CALayer *layer = [CALayer layer];
CATransform3D transform = layer.transform;
GLKMatrix4 matrix4 = *(GLKMatrix4 *)&transform;
這叫雙關類型。除非你明白這是如何工作的,否則你不應該使用它。由於數據結構在內存中不同,因此不能將CATransform3D雙擊到GLKMatrix4。
參考鏈接:type punning
GLKMatrix4
union _GLKMatrix4
{
struct
{
float m00, m01, m02, m03;
float m10, m11, m12, m13;
float m20, m21, m22, m23;
float m30, m31, m32, m33;
};
float m[16];
}
typedef union _GLKMatrix4 GLKMatrix4;
CATransform3D
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
像這樣的東西應該工作:
CATransform3D t;
GLKMatrix4 t2 = *((GLKMatrix4 *)&t);
t = *((CATransform3D *)&t2);
假設CATransform3d
和GLKMatrix4
具有相同的列/行設置。 (我這麼認爲)
其實這是不行的。我試了一下,儘管它編譯了一個基本問題。 CATransform3d是CFFloat類型的矩陣,它是雙精度的,而GLKMatrix4是GLfloat的矩陣,它是float。沒有演員會解決尺寸不兼容的問題。 – Matt
請不要提倡這個思維過程。這兩種結構在內存上完全不同。你可以測試這個理論,並執行一個GLKMatrix3MultiplyVector3等(甚至可以打印出檢索到的值),你會立即發現它們在內存中的處理方式不同,並會給你提供截然不同的結果。 – TheCodingArt
- 1. CATransform3D變換
- 2. 使用CATransform3D透視的摺紙轉換
- 3. 「renderInContext:」和CATransform3D
- 4. 使用Core Motion和CATransform3D旋轉圖像
- 5. 比較GLKMatrix4
- 6. 將CATransform3D轉換爲用於CIPerspectiveTransform的CIVector,替換UIGetScreenImage
- 7. 如何將3D OpenGL矩陣轉換爲CoreAnimation CATransform3D?
- 8. 將逆CATransform3D應用於已轉換的CALayer的子圖層
- 9. CATransform3D equivavelent到CGPointApplyAffineTransform和朋友
- 10. CATransform3D旋轉,標籤爲子視圖
- 11. iPhoneSDK通過CATransform3D計算旋轉角度
- 12. CATransform3D旋轉視圖邊緣的深度
- 13. 如何使用CATransform3D翻轉CALayer?
- 14. 使用CATransform3D翻轉兩個UIView
- 15. 使用CATransform3D創建翻轉動畫
- 16. CATransform3D:透視變換後計算高度
- 17. 用CATransform3D旋轉和翻譯CALayer的正確順序是什麼
- 18. CMAttitude和CATransform3D與旋轉矩陣相關嗎?
- 19. 使用CATransform3D
- 20. UIPanGestureRecognizer - translationInView與CATransform3D
- 21. 瞭解CATransform3D
- 22. 從CATransform3D到CGAffineTransform
- 23. CAKeyAnimation with CATransform3D
- 24. iOS OpenGL ES 2.0 GLKit GLKMatrix4旋轉後碰觸結束
- 25. 得到CATransform3D和模型視圖矩陣
- 26. 如何避免iOS上的CATransform3D旋轉傾斜/翻轉?
- 27. iOS的CATransform3D座標
- 28. CATransForm3D矩陣問題
- 29. CATransform3D的UIViewž邊境
- 30. 如何更改GLKMatrix4中的值
像魅力一樣工作:D感謝隊友:) – ravoorinandan