3

我设法设置了一个NSOpenGLViewusingCVDisplayLinkSetOutputCallback作为在我的应用程序中渲染场景的方法。一切似乎都正常工作,并且回调方法以相当不错的速度触发。

到目前为止,我的实现基于很久以前(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这样使用,即:用于场景渲染和更新一体化?

任何进一步的信息将不胜感激。

4

0 回答 0