Gibt es eine Möglichkeit, von CATransform3D zu GLKMatrix4 zu konvertieren, oder muss ich sie immer manuell von Wert zu Wert konvertieren? Ich denke, Casting wäre schneller.Convert GLKMatrix4 und CATransform3D
Antwort
Leider gibt es jetzt nicht. Es gibt wahrscheinlich einen versteckten API-Aufruf, den Apple verwendet, um über CALayers und OpenGL zu konvertieren, aber für den Moment ist das Beste das Beste. Ich würde nur eine Utility-Klasse machen, die das darin enthalten würde.
- (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;
}
mit so etwas wie
CALayer *layer = [CALayer layer];
CATransform3D transform = layer.transform;
GLKMatrix4 matrix4 = *(GLKMatrix4 *)&transform;
Ist Typ punning genannt. Wenn Sie nicht verstehen, wie das funktioniert, sollten Sie es nicht verwenden. Sie können eine CATransform3D nicht auf eine GLKMatrix4 schreiben, da sich ihre Datenstrukturen im Speicher unterscheiden.
Referenz Link: 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;
So etwas sollte funktionieren:
CATransform3D t;
GLKMatrix4 t2 = *((GLKMatrix4 *)&t);
t = *((CATransform3D *)&t2);
Unter der Annahme, CATransform3d
und GLKMatrix4
haben die gleiche Spalte/Zeile Setup. (Ich denke schon)
Eigentlich wird dies nicht funktionieren. Ich habe es ausprobiert und obwohl es kompiliert, gibt es ein grundlegendes Problem. CATransform3d ist eine Matrix von CFFloat-Typen, die doppelt sind, und GLKMatrix4 ist eine Matrix von GLfloat, die float ist. Kein Cast wird die Größeninkompatibilität beheben. – Matt
Bitte fördern Sie diesen Gedankenprozess nicht. Die zwei Strukturen sind im Gedächtnis völlig unterschiedlich. Sie können diese Theorie testen und einen GLKMatrix3MultiplyVector3 oder einen solchen durchführen (oder sogar die abgerufenen Werte ausdrucken) und Sie werden sofort feststellen, dass sie im Speicher nicht gleich behandelt werden und Ihnen völlig andere Ergebnisse liefern. – TheCodingArt
- 1. GLKMatrix4 (und andere ähnliche) fehlen in swift?
- 2. Sind CMAttitude und CATransform3D durch Rotationsmatrizen verbunden?
- 3. CATransform3D vs. CGAffineTransform?
- 4. CATransform3D UIView z Border
- 5. Schlechte Leistung mit CATransform3D
- 6. Von CATransform3D zu CGAffineTransform
- 7. CAKeyAnimation mit CATransform3D
- 8. Winkel zwischen 2 GLKMatrix4 Objekt in OpenGLES?
- 9. UITextView nach CATransform3D: alles scrollen
- 10. Bedeutung von m34 von CATransform3D
- 11. 3D-Animation - CABasicAnimation und CATransform3D geben Lücke zwischen den Ansichten
- 12. Die 'Skalierung' von einem CATransform3D abrufen
- 13. CATransform3D Perspektive arbeitet nicht an CATransformLayer
- 14. Wie soll ich ein OpenGLES ModelView in ein CATransform3D übersetzen?
- 15. Convert long in zwei int und umgekehrt
- 16. Sind CAST und CONVERT in SQL identisch?
- 17. Convert HTML-Entitäten in Unicode und umgekehrt
- 18. Convert AVAudioPCMBuffer in NSData und zurück
- 19. filepicker.io - convert() und Speichern vs FPUrl Konvertierungen
- 20. Convert und Pad eine Liste numpy Array
- 21. Convert String in binären Nullen und Einsen
- 22. Convert DataTable in XML-Datei und umgekehrt
- 23. Was ist die richtige Reihenfolge zum Drehen und Übersetzen eines CALayers mit CATransform3D
- 24. Convert MediaElementAudioSourceNode
- 25. Convert String
- 26. Convert PartialView
- 27. Convert Laravel
- 28. Convert Datums- und Uhrzeit geschrieben Datum und Zeit mit JavaScript
- 29. convert Liste der Zeichenfolge und Nummer zu bespannen und schweben
- 30. Animationspaket kann ImageMagick mit convert = "convert" nicht finden
arbeitete wie Charme: D danke Kumpel :) – ravoorinandan