我正在处理一个OpenGL项目,它简单地使用一个2D数组来创建bezier曲线(顺序是起点、->起始控制点、->末端控制点、-> end):
GLfloat controlPointsGirl[numControlPointsGirl][3] = {
{1.0,0.0,0.0},{1.0,-0.5,0.0},{1.0,0.0,0.0},{-1.0,0.5,0.0}
}; 并使用以下公式(取自boards/showthread.php/136550-Moving-object-along-a-bezier-curve )沿该路径移动字符:
//Drawing, initializing, display refresh every timeInterval seconds, etc.
girlX = ((1 - time)*(1 - time)*(1 - time)*controlPointsGirl[0][0]
+ (3 + time*(1 - time)*(1 - time))* controlPointsGirl[1][0]
+ (3 * time*time*(1 - time))* controlPointsGirl[2][0]
+ time*time*time*controlPointsGirl[3][0])
/10;
cout << girlX <<" ";
girlY = ((1 - time)*(1 - time)*(1 - time)*controlPointsGirl[0][1]
+ (3 + time*(1 - time)*(1 - time))* controlPointsGirl[1][1]
+ (3 * time*time*(1 - time))* controlPointsGirl[2][1]
+ time*time*time*controlPointsGirl[3][1])
/10;
cout << girlY << endl;
time += timeInterval;问题是,这种逻辑导致非常急促的运动,当时钟超过1秒时,运动也会迅速加速。这显然不是理想的,我希望女孩的运动速度是固定的,而且理想的情况下,我也希望能够选择一个速度来进行运动。我已经对这个公式做了很多调整,但是我很难解决这个问题,我该如何修改这段代码以实现我想要的结果呢?
发布于 2018-03-15 04:14:28
看看你所提供的公式的链接,你的方程式中有一个错误。第二个术语在应该是3 + time的时候使用3 * time
(3 * time*(1 - time)*(1 - time))* controlPointsGirl[1][0]在这两个方程中。
https://stackoverflow.com/questions/49290723
复制相似问题