ユーザーに見えるように、左/右/上/下にまっすぐ回転させようとしているCSS 3Dキューブがあります。cssrotation
関数を使用する場合は、立方体ではなく軸を回転させます。
Web 上には X、Y、Z 行列の回転計算に関する記事がたくさんありますが、私はこれを設定するために何日も費やしましたが、この情報はどれも本当に役に立ちません。
私の問題の回避策はWebKitCSSMatrix
、魔法のように機能する独自の回転機能を持つオブジェクトです。Fiddle の例: http://jsfiddle.net/joecritch/tZBDW/。繰り返しになりますが、これは Webkit のみに依存していますが、ここではクロスブラウズする必要があります。
さて、成功への道には3つのステップがあります:
1) 現在の行列を取得し、方向ベクトル (上下の場合は 1,0,0、左右の回転の場合は 0,1,0) を設定し、角度を設定する必要があります。終わり。
2) 現在の行列に基づいて新しい回転ベクトルを計算する必要があります。終わり。
3) 現在の行列を新しいベクトルと角度で実際に回転させる必要があります。問題。
var newMArray = deMatrix(".cube");//getting current matrix from CSS
var v = [vecX, vecY, vecZ, 0];//current vector (1,0,0) or (0,1,0)
var newV = newMVector(newMArray, v);//calculating new vector for current matrix
//getting the angle for each axis based on new vector
angleX = newV[0]*angle;
angleY = newV[1]*angle;
angleZ = newV[2]*angle;
this.rotateX -= angleX;
this.rotateY -= angleY;
this.rotateZ -= angleZ;
//calculating the rotation matrix
var rotationXMatrix, rotationYMatrix, rotationZMatrix, s, transformationMatrix;
rotationXMatrix = $M([[1, 0, 0, 0], [0, Math.cos(this.rotateX * deg2rad), Math.sin(-this.rotateX * deg2rad), 0], [0, Math.sin(this.rotateX * deg2rad), Math.cos(this.rotateX * deg2rad), 0], [0, 0, 0, 1]]);
rotationYMatrix = $M([[Math.cos(this.rotateY * deg2rad), 0, Math.sin(this.rotateY * deg2rad), 0], [0, 1, 0, 0], [Math.sin(-this.rotateY * deg2rad), 0, Math.cos(this.rotateY * deg2rad), 0], [0, 0, 0, 1]]);
rotationZMatrix = $M([[Math.cos(this.rotateZ * deg2rad), Math.sin(-this.rotateZ * deg2rad), 0, 0], [Math.sin(this.rotateZ * deg2rad), Math.cos(this.rotateZ * deg2rad), 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]);
transformationMatrix = rotationXMatrix.x(rotationYMatrix).x(rotationZMatrix);//getting all axis rotation into one matrix
CSSキューブに新しい変換マトリックスを設定しています。問題は、回転しないことです。現在、Sylvester
プラグインを使用してすべての行列計算を行っています。
それで、適切なマトリックス回転のために新しいベクトルを使用する方法を教えてください。