Ich fand eine Tonne von Formeln und was nicht, aber 3D ist nicht meine Stärke, so bin ich bei dem Verlust dessen, was speziell zu verwenden. Mein Ziel ist es, die Daten in einer 3D-OBJ-Datei (Vertices, Normalen, Faces) nach CSS3D (Breite, Höhe, RotateX, Y, Z und/oder ähnliche Transformationen) zu konvertieren.Konvertieren OBJ Daten in CSS3D
#plane1 {
width: X;
height: Y;
transform: rotateX(Xdeg) rotateY(Ydeg) rotateZ(Zdeg) translateZ(Zpx)
}
#plane2 {
width: X;
height: Y;
transform: rotateX(Xdeg) rotateY(Ydeg) rotateZ(Zdeg) translateZ(Zpx)
}
/* Or something equivalent such as transform: matrix3d() */
Frage Der Kern ist wie die X erhalten/Y/Z-Drehung einer 4-Punkt-Ebene:
Beispiel 2 einfachen Ebenen
g plane1
# simple along along Z axis
v 0.0 0.0 0.0
v 0.0 0.0 1.0
v 0.0 1.0 1.0
v 0.0 1.0 0.0
g plane2
# plane rotated 90 degrees along Y-axis
v 0.0 0.0 0.0
v 0.0 1.0 0.0
v 1.0 1.0 0.0
v 1.0 0.0 0.0
f 1 2 3 4
f 5 6 7 8
Könnte diese Daten umgewandelt werden, aus seiner Matrix von x, y, z-Koordinaten?
UPDATE # 1 - 11/12/12 So basiert auf den Antworten zur Verfügung gestellt, ich habe unten aus http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToEuler/index.htm über die nicht optimierte Funktion kommen:
/*
-v 0.940148 -0.847439 -1.052535
-v 0.940148 -0.847439 0.947465
-v -1.059852 -0.847439 0.947465
-v -1.059852 -0.847439 -1.052535
-v 0.940148 1.152561 -1.052534
-v 0.940147 1.152561 0.947466
-v -1.059852 1.152561 0.947465
v -1.059852 1.152561 -1.052535
f 1 2 3 4
f 5 8 7 6
f 1 5 6 2
f 2 6 7 3
f 3 7 8 4
f 5 1 4 8
*/
var f = {
'm00' : 0.940148,
'm01' : -0.847439,
'm02' : -1.052535,
'm10' : 0.940148,
'm11' : -0.847439,
'm12' : 0.947465,
'm20' : -1.059852,
'm21' : -0.847439,
'm22' : 0.947465
}
// Assuming the angles are in radians.
if (f.m10 > 0.998) { // singularity at north pole
heading = Math.atan2(f.m02, f.m22);
attitude = Math.PI/2;
bank = 0;
} else if (f.m10 < -0.998) { // singularity at south pole
heading = Math.atan2(f.m02,f.m22);
attitude = -Math.PI/2;
bank = 0;
} else {
heading = Math.atan2(-f.m20, f.m00);
bank = Math.atan2(-f.m12, f.m11);
attitude = Math.asin(f.m10);
}
ich das Erzielen von Ergebnissen, aber ich bin mir nicht sicher, ob meine Berechnungen korrekt sind und ich bekomme auch gemischte Antworten darauf, was mit welcher Achse übereinstimmt. Ist es Kurs = y, Bank = x und Einstellung = z? Ich konvertiere auch jeden Grad, wenn das wichtig ist.
möglich Duplikat Matrix zu Euler-Winkel: http://stackoverflow.com/ Fragen/11137591/matrix-zu-eulerangles – FlavorScape
Haben Sie die Leistung gemessen? Erstellen Sie einen Benchmark mit der gewünschten Anzahl von css3d-Transformationen basierend auf zufälligen Eingabewerten.Wenn es auf dem Zielgerät nacheilt, ist Ihre Arbeit Zeitverschwendung. Die durchschnittliche obj-Datei enthält eine große Anzahl von Gesichtern. – JAre
Es war kein Problem der Leistung. Es kam auf eklatante falsche Mathematik von meiner Seite. Die verwendeten OBJ-Dateien werden speziell mit CSS3D erstellt, so dass sie nur eine minimale Menge an Polygonen haben. –