Iphone OpenGL ES重复使用或绘制一次纹理场景

好吧,所以我在OpenGL中为Iphone绘制图表。 一切正常,直到我使用该Texture2D类绘制X轴标签和Y轴标签。 绘制标签的功能在我认为非常耗时的每一帧执行。 为了解决动画放缓,我有两个想法,但我仍然无法找到如何实现它们:1.绘制标签1次,但下次只是重用它们,重用矩阵或纹理,如果存在任何可能性(抱歉,我是一个新手,我可能会写一些不足够的东西); 2.清洁缓冲区(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT))时,只清洁屏幕的一部分,而不是整个渲染场景,我也很乐意知道是否有可能清除整个屏幕,但是绘制对象(例如,在“柱形图”中,只清除列,而不是背景,而不是标签或lengend)。 我非常感谢你的帮助。


如果每次清除完整的渲染缓冲区,情况会更加简单,并且更加顺畅。 只需将轴预渲染为单个纹理并在每次通过时渲染纹理即可。


    glLoadIdentity();    // Added line

glEnableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

NumberFormatter *lFormater = [[NumberFormatter alloc] init];
int i = 0;
for (NSNumber *lNumber in mColXLabelCoord) {
    NSNumber *lUnformated = [NSNumber numberWithInteger:[[NSString stringWithString:[mColYLabelsArray objectAtIndex:i]] integerValue]];

    NSString *lFormated = [NSString stringWithString:[lFormater stringFromNumber:lUnformated withMask:[[mGraphArray objectAtIndex:0] mGraphMask]]];

    Texture2D* lWord= [[Texture2D alloc] initWithString:lFormated dimensions:CGSizeMake(40, 15) alignment:UITextAlignmentLeft fontName:@"Helvetica" fontSize:13];

    glColor4f(RedFromRGB(0xFFFFFF), GreenFromRGB(0xFFFFFF), BlueFromRGB(0xFFFFFF), 1.0);            
    [lWord drawInRect:CGRectMake([lNumber floatValue]+2, 470,40,15) rotation:-90];

    [lWord release];


    i++;        
}   
[lFormater release];

i = [mColYCoord count]-1;
for (NSNumber *lNumber in mColYCoord) {     
    Texture2D* lWord= [[Texture2D alloc] initWithString:[NSString stringWithFormat:((GraphValue*)[mGraphValuesArray objectAtIndex:i]).mGraphValueXLabel,[lNumber floatValue]] 
                                             dimensions:CGSizeMake(40, 15) 
                                              alignment:UITextAlignmentCenter
                                               fontName:@"Helvetica" fontSize:12];

    if ([mColYCoord count] < kOptimalLabelNumber) {
        glColor4f(RedFromRGB(0xFFFFFF), GreenFromRGB(0xFFFFFF), BlueFromRGB(0xFFFFFF), 1.0);            
        [lWord drawInRect:CGRectMake(10, [lNumber floatValue]+15, 40, 15) rotation:-90];            
    }else {
        glColor4f(RedFromRGB(0xFFFFFF), GreenFromRGB(0xFFFFFF), BlueFromRGB(0xFFFFFF), 1.0);            
        [lWord drawInRect:CGRectMake(2, [lNumber floatValue]+5, 40, 15) rotation:-30];          

    }
    [lWord release];
    i--;
}

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

glDisableClientState(GL_VERTEX_ARRAY);
链接地址: http://www.djcxy.com/p/5811.html

上一篇: Iphone OpenGL ES Reuse or draw once Texture scene

下一篇: Render string to texture in Android and OpenGL ES