标签:
如何计算呢? 请见下面的代码:
<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