在固定的时间间隔内为一张图像加载两个纹理- GLkit openglES



我使用下面的代码在一个对象上加载纹理。

- (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使用延迟选择器执行的建议可以应用于改变纹理,或者设置一个标志来触发更新方法来改变纹理。

最新更新