我设法设置了一个NSOpenGLView
usingCVDisplayLinkSetOutputCallback
作为在我的应用程序中渲染场景的方法。一切似乎都正常工作,并且回调方法以相当不错的速度触发。
到目前为止,我的实现基于很久以前(2009 年)在这个论坛线程(特别是这篇文章)中找到的代码。
进一步挖掘线程,提到设置NSTimer
一个固定的步长间隔,这将调用update:(NSTimeInterval)duration
一种用于集成物理模拟等的方法。但是,似乎帧之间的增量时间也在显示链接回调方法中计算,我发现这很令人困惑。
我以前没有考虑过更新场景的固定步长时间间隔,老实说,这对我来说似乎不太合适,但我仍在学习 OpenGL 和游戏开发的细微差别。
在显示链接回调中将更新和渲染方法绑定在一起是一种好方法,还是更适合放在其他地方?
我已经GLKit
在 iOS 上使用过所有东西,并且工作起来相当简单,因为您符合适当的委托方法,并且相应地调用了您的更新和渲染方法。
到目前为止,我的代码如下所示:(基于论坛帖子中的代码)
static CVReturn displayLinkOutputCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *now, const CVTimeStamp *outputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext)
{
NSOpenGLView *view = (__bridge NSOpenGLView *)displayLinkContext;
NSTimeInterval deltaTime = 1.0 / (outputTime->rateScalar * (double)outputTime->videoTimeScale / (double)outputTime->videoRefreshPeriod);
[view update:deltaTime];
[view drawRect:[view frame]];
return kCVReturnSuccess;
}
这是一种可行的方法吗?我应该改用一个NSTimer
吗?还是有可能更适合的替代方法?
我不太熟悉,CVDisplayLink
所以我不确定这是否是实施更新和渲染场景方法的最佳场所。应该CVDisplayLink
这样使用,即:用于场景渲染和更新一体化?
任何进一步的信息将不胜感激。