好吧,我正在爲OpenGL繪製Iphone圖表。一切正常,直到我使用該Texture2D類繪製X軸標籤和Y軸標籤。繪製標籤的功能在我認爲非常耗時的每一幀執行。爲了解決動畫放緩,我有兩個想法,但我仍然無法找到如何實現它們: 1.繪製標籤1次,但下次只是重用它們,重用矩陣或紋理,如果有有任何可能(抱歉,我是一個新手,我可能會寫一些不夠的東西); 2.當清潔緩衝區(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT))時,只清潔屏幕的一部分,而不是整個渲染場景,我也很樂意知道是否有可能清除整個屏幕,但是(例如在柱狀圖中,只清除列,而不是背景,而不是標籤或lengend)。 非常感謝您的幫助。Iphone OpenGL ES重複使用或繪製一次紋理場景
0
A
回答
0
如果每次清除完整的渲染緩衝區,事情將會簡單得多,並且更加順暢。只需將軸預渲染爲單個紋理並在每次通過時渲染紋理即可。
2
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);
相關問題
- 1. Opengl-es繪製紋理
- 2. 使用OpenGL ES繪製紋理
- 3. OpenGL ES iPhone紋理
- 4. 僅繪製一個紋理的OpenGL ES iPhone
- 5. OpenGL ES繪製黑色紋理
- 6. Android的OpenGL ES沒有繪製紋理
- 7. OpenGL ES紋理不會繪製
- 8. Opengl ES紋理不繪製正確
- 9. iOS 4.1 OpenGL ES 1.1未繪製紋理
- 10. OpenGL ES 1.1 2D紋理紋理iPhone
- 11. 如何使用OpenGL ES 2將紋理繪製爲四邊形?
- 12. 如何在OpenGL ES 2.0中將紋理繪製爲2D背景?
- 13. 的OpenGL ES 2.0 - 複製紋理數據
- 14. OpenGL ES 2.0紋理
- 15. 使用OpenGL ES 2.0和Android NDK繪製的紋理
- 16. 在openGL中繪製紋理觸摸iphone
- 17. opengl es:用漸變漸變繪製紋理
- 18. OpenGL ES IOS紋理2D繪圖顛倒
- 19. OpenGL ES 2.0只繪製對象一次
- 20. iPhone的OpenGL-ES視頻紋理
- 21. 異步紋理加載iPhone OpenGL ES 2
- 22. 在iPhone的OpenGL ES中紋理球體
- 23. iPhone OpenGL ES 2.0 - 像素完美紋理
- 24. 禁用opengl es紋理ios
- 25. 紋理複製opengl
- 26. OpenGL ES渲染到紋理
- 27. OpenGL ES在多紋理中使用glColor4f
- 28. 用OpenGL ES繪製紋理最簡單的方法是什麼?
- 29. OpenGL ES 2.0衍生紋理
- 30. OpenGL ES 2.0幾個場景
通過清除渲染緩衝區做你的意思是清除框架和深度緩衝(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT))。如果是這樣,我會在每一幀中清除它們。我如何預先渲染軸到一個紋理。對不起,您能否提供更多詳細信息,以及一些代碼示例?我會提到你,我正在使用Texture2D類來繪製標籤。以下是我如何做到的: – 2010-10-29 13:39:29