拖尾飘带的优化实践
前一个项目针对的是仙侠风格的3D游戏,因此角色会随身带着类似飘带的东西。
这个东西主要是根据 世界坐标中的位置偏移增加节点,节点中包含 生命周期,起始坐标点,终止坐标点,速度,颜色等。
要注意的是添加node的策略,一般来说平滑的路径只需要少数的点,旋转的路径需要的点就比较多。
因此 有两个判断的标准,一个是位移的距离,另外一个就是旋转角度的差值。
其中优化的过程体现在:
旋转角度的差值用四元数的Dot操作。然后根据cos函数的单调递减的特性跟15度,30度,45度,60度,90度做比较
代码如下:
disSq = Vec3::distanceSQ( mLastTransform, currentTranslation ); angleDot = fabsf(kmQuaternionDot( &mLastRotation.val, ¤tRotation.val ));// #if 1 if( angleDot<MAXANGLE_DOT_15) oddNum += 5; if( angleDot<MAXANGLE_DOT_30 ) oddNum += 2; if( angleDot<MAXANGLE_DOT_45 ) oddNum += 1; if( angleDot<MAXANGLE_DOT_60 ) oddNum += 1; if( angleDot<MAXANGLE_DOT_75 ) oddNum += 1; #endif if( disSq > mfSampleLenSQ ) oddNum++ ;
虽然有点瑕疵,但是效果还不错,计算性能也还可以。
浙公网安备 33010602011771号