标签:
如何计算呢? 请见下面的代码:
<span style="white-space:pre"> </span>/**
* 通过速度, 计算物体朝向矩阵的三个轴的数据
* */
public static function calcDirecMatByVelocity(spdv:Vector3D):Vector.<Vector3D> {
// 记录x轴的基向量
var axis_x:Vector3D = new Vector3D(1, 0, 0);
// axis_x和spdv 叉乘
var cross_x:Vector3D = axis_x.crossProduct(spdv);
// cross_x和spdv 叉乘,并将叉乘结果记录在 MathCalc.outCrossV 这个3D矢量中,用这个函数是为了不产生新的3d矢量对象
MathCalc.crossV3D2(cross_x, spdv);
cross_x.normalize();
MathCalc.outCrossV.normalize();
//
cross_x.x = 0.5 * (cross_x.x + MathCalc.outCrossV.x);
cross_x.y = 0.5 * (cross_x.y + MathCalc.outCrossV.y);
cross_x.z = 0.5 * (cross_x.z + MathCalc.outCrossV.z);
// 至此, 已经计算出了 新的z轴
cross_x.normalize();
// 得到 新的 y轴
var axis_y:Vector3D = cross_x.crossProduct(spdv);
axis_y.normalize();
// spdv 就是 新x 轴, 标准化
axis_x.setTo(spdv.x,spdv.y,spdv.z);
axis_x.normalize();
//
var vs:Vector.<Vector3D> = new Vector.<Vector3D>();
vs.push(axis_x,axis_y,cross_x);
return vs;
}标签:
原文地址:http://blog.csdn.net/vily_lei/article/details/45397761