我使用下面的代码在一个对象上加载纹理。
- (void)ldText:(UIImage *)Image
{
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
CGImageRef cgImage = Image.CGImage;
float Width = CGImageGetWidth(cgImage);
float Height = CGImageGetHeight(cgImage);
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(cgImage));
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, CFDataGetBytePtr(data));
}
纹理正在被正确映射。
我现在需要加载两个纹理。纹理应该每隔一段时间改变一次。这可能吗?有人能告诉我怎么从这里开始吗?
* 更新:我用Image2加载了另一个纹理,函数为ldText2。并在每个"更新视图"中更新它。现在我在同一个物体上得到两个纹理,并且每当"更新"函数被调用时都会被更改。每次调用"Update"函数时,我都会交换texture1和texture2。但问题是时间间隔!我希望它慢慢发生。如何设置一个时间间隔? *
默认情况下,GLKViewController提供了一个基于preferredFramesPerSecond
属性调用update的动画循环。(实际使用的速率在framesPerSecond
属性中)。
您可以通过设置首选速率来获得一些控制,但如果您希望显示保持静态超过几分之一秒,则更有可能希望关闭动画循环。为此,将paused
属性设置为YES,并重写resumeOnDidBecomeActive
以返回NO。然后,您需要确保display
在适当的时间在视图上被调用,要么显式地这样做,要么确保视图上的enableSetNeedsDisplay
属性设置为YES,并使视图无效。
如果你想保持动画循环活动的其他原因,那么Matic Oblak使用延迟选择器执行的建议可以应用于改变纹理,或者设置一个标志来触发更新方法来改变纹理。