【问题标题】:Load a two texture for a single image at a regular interval of time - GLkit openglES以固定的时间间隔为单个图像加载两个纹理 - GLkit openglES
【发布时间】:2013-03-14 10:44:48
【问题描述】:

我使用以下代码将纹理加载到对象上。

- (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));
}

纹理被正确映射。

我现在需要加载两个纹理。并且纹理应该定期更改。是否可以?有人可以指导我如何从这里开始吗?

*更新: 我用函数 ldText2 用 Image2 加载了另一个纹理。并在每个“更新视图”中更新它。现在,我在同一个对象上获得了两个纹理,并且每当调用“更新”函数时都会发生变化。每次调用“更新”函数时,我都会交换纹理 1 和纹理 2。 但问题是时间间隔!我希望它慢慢发生。如何为此设置时间间隔?*

【问题讨论】:

  • 比如使用NSObject的这个方法? - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

标签: iphone ios objective-c opengl-es glkit


【解决方案1】:

默认情况下,GLKViewController 为您提供一个动画循环,该循环基于preferredFramesPerSecond 属性调用更新。 (实际使用的速率在framesPerSecond 属性中)。

您可以通过设置首选速率获得一些控制,但如果您希望显示保持静止超过几分之一秒,则更有可能想要关闭动画循环。为此,请将paused 属性设置为YES,并覆盖resumeOnDidBecomeActive 以返回NO。然后,您需要确保 display 在适当的时候在视图上被调用,要么明确地这样做,要么确保视图上的 enableSetNeedsDisplay 属性设置为 YES,并且使视图无效。

如果您出于其他原因想要保持动画循环处于活动状态,则可以应用 Matic Oblak 使用延迟选择器执行的建议来更改纹理,或者设置一个标志以触发更新方法来更改纹理。

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 2017-06-25
    • 2013-08-20
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多