@bydreamxxx 写道:
用贝塞尔曲线实现了鱼的游动 但是只能在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);
谁能说说原理或者在贝塞尔曲线里怎么实现么? 对四元数理解太差了
帖子: 3
参与者: 1