用贝塞尔曲线实现了鱼的游动 但是只能在x y上转角正常
x z轴的角度加上后旋转混乱
看了一个教程用了2次B样条来实现
具体是根据三个控制点 求出切线 然后求大致法线 然后根据大致法线求Z 最后求出真实法线
然后根据切线 法线 Z构造Mat4 再转换成四元数
//插值点
Vec3 pt = getInterpolatedPt(_controlPts[_idx-2], _controlPts[_idx-1], _controlPts[_idx], _t);
//切线 求导得到
Vec3 ptDiff = -getInterpolatedPtDiff(_controlPts[_idx-2], _controlPts[_idx-1], _controlPts[_idx], _t);
ptDiff.normalize();
//法线
Vec3 fakenormal = (_controlPts[_idx-1] - _controlPts[_idx-2]) + (_controlPts[_idx-1] - _controlPts[_idx]);
fakenormal.normalize();
Vec3 z;
Vec3::cross(ptDiff, fakenormal, &z);
Vec3::cross(z, ptDiff, &fakenormal);
Mat4 mat;
mat.m[0] = ptDiff.x; mat.m[1] = ptDiff.y; mat.m[2] = ptDiff.z;
mat.m[4] = fakenormal.x; mat.m[5] = fakenormal.y; mat.m[6] = fakenormal.z;
mat.m[8] = z.x; mat.m[9] = z.y; mat.m[10] = z.z;
//mat.rotateY(CC_DEGREES_TO_RADIANS(180.f));
Quaternion quat, oldQuat;
Quaternion::createFromRotationMatrix(mat, &quat);
oldQuat = _sprite->getRotationQuat();
Quaternion::slerp(oldQuat, quat, 0.1f, &quat);
_sprite->setRotationQuat(quat);
_sprite->setPosition3D(pt);
谁能说说原理或者在贝塞尔曲线里怎么实现么? 对四元数理解太差了