flash on 2009-10-23
z軸→dstの変換をx軸にかけたらどうなるか、を
dstを色々動かして試す
♥0 |
Line 42 |
Modified 2009-10-23 11:41:49 |
MIT License
archived:2017-03-30 04:46:56
ActionScript3 source code
/**
* Copyright uwi ( http://wonderfl.net/user/uwi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/hEd0
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.getTimer;
import org.papervision3d.objects.*;
import org.papervision3d.core.math.*;
// z軸→dstの変換をx軸にかけたらどうなるか、を
// dstを色々動かして試す
public class Test extends Sprite {
private var _tf : TextField;
public function Test() {
_tf = new TextField();
_tf.width = 465;
_tf.height = 465;
addChild(_tf);
var s : int = getTimer();
var src : DisplayObject3D = new DisplayObject3D();
var dst : DisplayObject3D = new DisplayObject3D();
src.position = new Number3D(0, 0, 0);
for(var i : Number = 0;i <= 6.28;i += 0.2){
dst.position = new Number3D(0, -Math.sin(i), Math.cos(i));
// dst.position = new Number3D(Math.sin(i), 0, Math.cos(i));
// るっくあと
src.lookAt(dst);
var v : Number3D = new Number3D(1, 0, 0);
Matrix3D.multiplyVector3x3(src.transform, v);
// くぉーたにおん
var Z : Number3D = new Number3D(0, 0, 1);
// var X : Number3D = new Number3D(1, 0, 0);
var qX : Quaternion = new Quaternion(1, 0, 0, 0);
var n : Number3D = Number3D.cross(Z, dst.position);
n.normalize();
var rot : Number = Math.acos(Number3D.dot(Z, dst.position));
var q : Quaternion = Quaternion.createFromAxisAngle(n.x, n.y, n.z, rot);
var r : Quaternion = Quaternion.conjugate(q);
var ans : Quaternion = Quaternion.multiply(r, qX);
ans = Quaternion.multiply(ans, q);
tr(dst.position, "\t", v, "\t", ans.x, ans.y, ans.z);
}
var g : int = getTimer();
tr((g - s) + " ms");
}
private function tr(...o : Array) : void
{
_tf.appendText(o + "\n");
}
}
}