[D3D]怎样让一个物体在封闭路径内循环移动?
我想让一个物体在一个封闭路径内循环移动,我是这样做的:
D3DXVECTOR3 PathPoints[10]; //定义路径上点的列表
D3DXVECTOR3 ObjPos , //物体的位置
CurrentPos , //路径上当前点所在的位置
NextPos; //路径上下一个点的位置
UINT CurrentNum , //路径上当前点的编号
NextNum ; //下一个点的编号
CurrentNum = 0 ; //初始化第一个编号为0,即从第一个点开始移动
if ( CurrenNum < 9 ) NextNum = CurrentNum + 1 ; //计算下一个点
else NextNum = 0 ;
ObjPos = PathPoints[0]; //物体位置初始化为路径上第一个点
CurrentPos = PathPoints[CurrentNum] ; //当前位置初始化为路径上第一个点
NextPos = PathPoints[NextNum] ; //下一个位置
D3DXVECTOR3 v0 = NextPos - CurrentPos ;
float d0 = D3DXVec3Length(&v0); //当前位置与下一个位置间的距离
D3DXVECTOR3 direct = v0 ; //计算移动的方向
D3DXVec3Normalize(&direct,&direct);
ObjPos += 0.001 * direct ; //移动物体
D3DXVECTOR3 v1 = NextPos - ObjPos ;
float d1 = D3DXVec3Length(&v1);// 物体到一个位置间的距离
if( d0 - d1 < 0.1) //如果物体到下一个点的距离小于10厘米,即认为已经到达,更新编号
{
if (CurrentNum < 9 ) CurrentNum += 1 ;
else CurrentNum = 0 ;
}
运行的结果,物体总是似乎停留在最后一个点上,不会循环.
事实上,即使没有最后的if( d0 - d1 < 0.1)语句更新编号,程序依然运行.它运行的轨迹其实不是给定的路径,而是从第一个点以后开始逐点作近似螺旋线递减运动.
我检测过,最后的if( d0 - d1 < 0.1)语句执行了,但被前面的ObjPos = PathPoints[0]语句覆盖了;而NextNum = CurrentNum + 1语句每帧执行一次,改变前进方向.
我想我的思路错了,我对D3D程序还不够熟悉,不知正确的思路是什么,请大侠们指点一下.
多谢了!
[解决办法]
CurrentNum = 0 ; //初始化第一个编号为0,即从第一个点开始移动
if ( CurrenNum < 9 ) NextNum = CurrentNum + 1 ; //计算下一个点
else NextNum = 0 ;
这两句挨得这么近是在一个函数里吗?CurrentNum 也不是static的,那下面的if不就恒为真了?
不知道是否是这里的问题?
[解决办法]
建议lz看下《DirectX高级动画制作》第二章的内容,沿路径循环运动这部分说的听仔细的
[解决办法]
这个可以用路径动画做