Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OSX/iPhone上计时OpenGL动画的最佳方法_Iphone_Objective C_Macos_Opengl Es - Fatal编程技术网

在OSX/iPhone上计时OpenGL动画的最佳方法

在OSX/iPhone上计时OpenGL动画的最佳方法,iphone,objective-c,macos,opengl-es,Iphone,Objective C,Macos,Opengl Es,我一直在Mac上试验OpenGL,使用Mac特定的OpenGL API,创建精确动画循环的最佳方法是什么?好吧,我没有使用mobile dev的经验,但我猜想法与在PC上相同。动画模型的关键帧插值应该在每次渲染场景时完成(当然,如果必要的话)。使用从iOS 5开始提供的GLKit,它带走了许多通常需要自己编写的锅炉板代码。 特别是游戏/动画循环由框架处理。基本上,您必须实现一些委托方法: 用于更新顶点等的GLKViewControllerDelegate: - (void)glkViewCont

我一直在Mac上试验OpenGL,使用Mac特定的OpenGL API,创建精确动画循环的最佳方法是什么?

好吧,我没有使用mobile dev的经验,但我猜想法与在PC上相同。动画模型的关键帧插值应该在每次渲染场景时完成(当然,如果必要的话)。

使用从iOS 5开始提供的GLKit,它带走了许多通常需要自己编写的锅炉板代码。 特别是游戏/动画循环由框架处理。基本上,您必须实现一些委托方法:

用于更新顶点等的GLKViewControllerDelegate:

- (void)glkViewControllerUpdate:(GLKViewController *)controller
GLKViewDelegate fro图纸:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect

在Mac端,您可能习惯于使用
CVDisplayLink
与垂直回溯同步。iOS的等效功能是
CADisplayLink
——基本上是相同的功能,但责任在于CoreAnimation而不是CoreVideo,语法略有不同


如果你愿意专门针对iOS 5,那么Kai的建议可能是最好的。只需使用GLKit的一个新视图控制器,所有与创建和连接显示链接相关的内容都会为你处理。

我按照苹果发布的编程指南尝试过这样做。但当我尝试在回调中绘制时,程序cr被exc\u bad\u访问权限弄得晕头转向。似乎我无法在以下定义的函数中进行任何绘图:CVDisplayLinkSetOutputCallback()
CVDisplayLinkSetOutputCallback
位于Mac端。此外,您指定的回调将在“单独的高优先级线程”上调用,因此您可能只想使用它将消息发布到主线程上,或者在您已授予OpenGL上下文所有权的任何位置。