android紋理
『壹』 android 用png圖像做opengl紋理時出現黑邊怎麼解決
誒呀,你這種用法大錯特錯了呀!texImage2D不能亂用呀,他是把資源導入GL用的,有點像玩游戲時的Loading.你應該在你的程序初始化時先glGentexture生成多個紋理句柄然後BindTexture,再把你需要的圖片依次輸入這時GL已經擁有了你全部的圖片資源,然後在繪制的時候,用到哪張紋理就先Bind這個紋理,然後DrawArray,再Bind再DrawArray/DrawElement..哪有你這樣每次draw都要texImage2D的?這不要慢死了推薦你去powervr的網站下載Opengles的pc端SDK,裡面好多demo
『貳』 cocos2dx android切換後台為什麼要重建紋理
android系統下,切入後台,則紋理全部失效,從後台切到前台,cocos2d-x會重新載入紋理。這樣有兩個問題:
1、如果紋理較多的話,載入紋理會卡很長時間,就像死機一樣。 變通解決方法是修改引擎代碼,增加一個進度條提示。
2、文字描邊等用到RenderTexture的地方會出現異常紋理,文字會花掉。 暫時不知道原因,無解。
這里提供一個解決方案,解決掉紋理失效的問題,初步測試沒有發現大的問題,但是具體還要看實際運行情況,畢竟android機器太多了。
1、Cocos2dXGLSurfaceView.java代碼修改
[cpp]view plain- @Override
- publicvoidonPause(){
- this.queueEvent(newRunnable(){
- @Override
- publicvoidrun(){
- Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnPause();
- }
- });
- //super.onPause();
- }
2、main.cpp中修改
[cpp]view plain- voidJava_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*env,jobjectthiz,jintw,jinth)
- {
- InitCrashReport();
- if(!CCDirector::sharedDirector()->getOpenGLView())
- {
- CCEGLView*view=CCEGLView::sharedOpenGLView();
- view->setFrameSize(w,h);
- AppDelegate*pAppDelegate=newAppDelegate();
- CCApplication::sharedApplication()->run();
- }
- //else
- //{
- //ccDrawInit();
- //ccGLInvalidateStateCache();
- //CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
- //CCTextureCache::reloadAllTextures();
- //CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND,NULL);
- //CCDirector::sharedDirector()->setGLDefaultValues();
- //}
- }
『叄』 android 中 glCompressedTexImage2D(GL_PALETTE8_RGBA8_OES)生成的壓縮紋理在顯存中是壓縮的嗎
是壓縮的。由於減少了帶寬佔用,對性能是有好處的。不過畫質是有損的。 你用的這個參數會出錯吧
『肆』 Android音視頻之使用OpenGL ES繪制圖片
關於 OpenGL ES 的介紹,請先看上篇: Android 音視頻之使用 OpenGL ES 繪制三角形 。
使用 OpenGL ES 繪制簡單的幾何形狀還不夠,OpenGL 更多地是用來顯示而紋理圖像,比如本地圖片、相機畫面。簡單說,紋理(texture)就是一個圖像或照片,它們可以被載入進 OpenGL 中。
OpenGL 中的紋理可以擾判用來表示圖像、照片等,每個二維的紋理都由許多小緩缺改的紋理元素組成,它們是小塊的數據,類似片段和像素。要使用紋理,最常用的方式是直接從一個圖像文件載入數據。
紋理不會被直接繪制,它們要被綁定到紋理單元,然後把這些紋理單元傳遞給著色器。紋理映射的基本思想就是:首先為圖元中的每個頂點指定恰當的紋理坐標,然後通過紋理坐標在紋理圖中可以確定選中的紋理區域,最後將選中紋理區域中的內容根據紋理坐標映射到指定的圖元上。
紋理的坐標系和頂點著色器的坐標系是不一樣的。紋理坐標用浮點數來表示,范圍 [0, 1],左上角坐標為 (0.0, 0.0),右上角坐標為 (1.0, 0.0)。注意:要將紋理坐標對應到正確的頂點上,才能使紋理正確扮銀地顯示。
定義頂點和紋理坐標,兩者的順序必須一一對應。
定義著色器。
載入圖片到 OpenGL 中。
計算變換矩陣,採用 CenterInside 或者 CenterCrop 的方式顯示。
顯示圖片。
源碼在 GitHub 上。
參考資料: