如该伪代码所示,模拟的最后应该调用 API 交换缓冲区来显示下一帧的画面。请问这一步在 Dandelion 中如何实现,是使用 OpenGL 的 api 吗?我没有实现这一步也让物体动起来了,就是有点卡顿的感觉,请问是什么原因。
附上一张确实动起来了的图片
以及,想知道为什么将时间步长设置为默认的 0.33s,也就是 1/30 s 的时候,设置 force 然后 start 之后物体就不会动了
附上一张确实动起来了的图片
以及,想知道为什么将时间步长设置为默认的 0.33s,也就是 1/30 s 的时候,设置 force 然后 start 之后物体就不会动了
模拟的最后应该调用 API 交换缓冲区来显示下一帧的画面。请问这一步在 Dandelion 中如何实现,是使用 OpenGL 的 api 吗?
是的,这里实际上是调用 GLFW API glfwSwapBuffers
实现的。文档里这样写是为了强调渲染帧间隔与模拟步长的时间关系,并不是说需要你来调用,所以你完全不用写这一步,能理解即可。
有点卡顿的感觉
只要你的电脑不是二十年前的老古董,应该就是你计算模拟步长的过程出了问题 很可能你某处条件判断错了,或者循环次数少了,导致实际上更新物体运动状态的时间间隔比 1/30 秒要长。
你可以在每次更新物体状态的时候(也就是伪代码里那个内层 while
循环)输出一条日志,然后模拟几秒钟后停止,再去数数日志文件里的日志行数是不是大致等于 秒数 x Simulation FPS。
为什么将时间步长设置为默认的 0.33s,也就是 1/30 s 的时候,设置 force 然后 start 之后物体就不会动了
那就肯定是你的实现有问题了,但你没有提供日志之类的调试信息,我也猜不出你这是什么问题。