導航:首頁 > 操作系統 > androidopengl模型

androidopengl模型

發布時間:2022-07-21 10:46:14

1. 如何在android上使用OpenGL ES 2.0繪制點

FrameBuffer對象的概念可以參見前面文章AndroidOpenGLES開發教程(23):FrameBuffer。簡單的和2D圖像類比,FrameBuffer如果對應到二維圖形環境中,就是一個2D的內存數組空間,預設情況為屏幕的顯存,也可以創建Offscreen內存空間,此時FrameBuffer可以是一個二維數組,數組每個元素代表一個像素顏色。對於三維圖形來說,除了需要代表顏色的二維數組(ColorBuffer),還需要深度二維數組(DepthBuffer)或遮罩數組(StencilBuffer),因此在OpenGL中的FrameBuffer為上述ColorBuffer,DepthBuffer,StencilBuffer的集合。如果手機具有GPU,其預設的FrameBuffer也是3D屏幕顯示區域。通過OpenglES擴展支持,應用程序也可以創建內存中的FrameBuffer對象(不用於屏幕顯示)。通過這種應用程序創建的FrameBuffer對象,OpenGL應用可以將圖像顯示輸出重新定向到這個非屏幕顯示用FrameBuffer對象中,類似於二維圖形繪制中常用的Offscreen技術。和預設的屏幕顯示FrameBuffer一樣,由應用程序創建的FrameBuffer對象也是由ColorBuffer,DepthBuffer和StencilBuffer(可選)的集合組成。這些Buffer在FrameBuffer對象中可以稱為FrameBuffer-attachable圖像,FrameBuffer定義了一些接入點(AttachmentPoint)可以用於連接(Attach)這些Buffer數組。OpenGLES定義了兩種FrameBuffer-attachable圖像,Texture和renderbuffer,簡單的可以將Texture理解為Colorbuffer或是2D圖像,renderbuffer對應於depthbuffer。

2. android開發openGL問題

最好能貼出具體的代碼,是通過C++原生代碼還是直接調用android的SDK關於Opengl的API?如果用得是API,需要具體看下google提供的文檔。

3. opengl在安卓上經過光照處理後,模型部分呈現純白色。但是在PC上是正常的,這一般是什麼問題

估計著色器用了手機不支持的特性

4. android opengl es中的模型如何使它透明

關於透明,OpenGL/ES 中可以通過 blend (混色) 來簡單實現,混色的基本原理就是把要繪制的物體的顏色與屏幕上已經繪制好的顏色以一定比例來混合,最後的顏色看上去就像半透明一樣。
要使用混合先要通過 glEnable 函數來啟用
1 glEnable(GL10.GL_BLEND);

然後通過 glBlendFunc 來設置下要使用的混合方法

1 glBlendFunc(sfactor, dfactor);

sfactor 及 dfactor 分別代表源和目標顏色在混合時所佔比重的枚舉常量。其中 sfactor 可取值包括:GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA_SATURATE ; 而 dfactor 可取值包括:GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA。
以下說明及公式中所涉及顏色的R、G、B、A值都是指浮點形式,即范圍在 0.0f – 1.0f 之間。
在計算混色時,首先是根據以上的枚舉得出源顏色和目標顏色的系數,然後分別與源和目標顏色相乘(乘積大於1時取值1),然後再把得出的結果相加。那麼如果假設根據以上枚舉得出的RGBA四個成分上的系數分別為 源 sfR, sfG, sfB, sfA, 目標 dfR, dfG, dfB, dfA, 源和目標的顏色成分值分別用 sR, sG, sB, sA 和 dR, dG, dB, dA 表示的話, 最終結果色的 rR, rG, rB, rA 分別為:
rR = sR * sfR + dR * dfR
rG = sG * sfG + dG * dfG
rB = sB * sfB + dB * dfB
rA = sA * sfA + dA * dfA
以上 rR, rG, rB, rA 的值如果大於 1 則最終取值為 1 。
然後再來看看 xfR, xfG, xfB, xfA ( x => s / d )是怎麼得出來的。
factor枚舉 xfR, xfG, xfB, xfA
GL_ZERO 0, 0, 0, 0
GL_ONE 1, 1, 1, 1
GL_SRC_COLOR sR, sG, sB, sA
GL_DST_COLOR dR, dG, dB, dA
GL_ONE_MINUS_SRC_COLOR 1-sR, 1-sG, 1-sB, 1-sA
GL_ONE_MINUS_DST_COLOR 1-dR, 1-dG, 1-dB, 1-dA
GL_SRC_ALPHA sA, sA, sA, sA
GL_DST_ALPHA dA, dA, dA, dA
GL_ONE_MINUS_SRC_ALPHA 1-sA, 1-sA, 1-sA, 1-sA
GL_ONE_MINUS_DST_ALPHA 1-dA, 1-dA, 1-dA, 1-dA
GL_SRC_ALPHA_SATURATE i, i, i, 1 *
上邊的表中最後的 i 取值為 min ( sA, 1-dA )
根據以上公式,
glBlendFunc(GL_ONE, GL_ONE); 即源與目標顏色的RGBA分別相加。
glBlendFunc(GL_ONE, GL_ZERO); 即只取源顏色,這也是默認值。
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 是比較典型的半透明效果,如果源色 alpha 為0,則取目標色,如果源色alpha為1,則取源色,否則視源色的alpha大小各取一部分。源色的alpha越大,則源色取的越多,最終結果源色的表現更強;源色的alpha越小,則目標色「透過」的越多。
此外在一般的渲染過程中,都會把有半透明效果的渲染放到後邊,先把不透明的部分在深度測試啟用的情況下渲染完, 再關閉深度測試寫入(glDepthMask(false)),並渲染半透明的部分。這樣就不會出現由於半透明且離鏡頭近的面被先渲染時污染深度緩沖了。

5. 如何學習android opengl

它為OpenGL提供一個專用的渲染線程,使主線程得以繼續。

它支持連續或按需渲染,維護屏幕設置以及OpenGL和底層窗口系統之間的介面。代碼如下:

@Override

publicvoidonCreate(BundlesavedInstanceState)

{

super.onCreate(savedInstanceState);

mGLSurfaceView=newGLSurfaceView(this);

//檢測系統是否支持OpenGLES2.0

=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

=activityManager.getDeviceConfigurationInfo();

finalbooleansupportsEs2=configurationInfo.reqGlEsVersion>=0x20000;

if(supportsEs2)

{

mGLSurfaceView.setEGLContextClientVersion(2);

mGLSurfaceView.setRenderer(newLessonOneRenderer());

}

else

{

return;

}

setContentView(mGLSurfaceView);

}

在onCreate()方法裡面主要是創建OpenGLES2.0上下文以及做一些初始化工作。在onCreate()中,調用超類之後的第一件事情就是創建GLSurfaceView。然後確定系統是否支持OpenGLES2.0。因此,我們需要一個可以與全局系統狀態相交互的ActivityManager實例,以及使用這個實例來得到設備配置信息,該信息將通知我們設備是否支持OpenGLES2.0。

一旦確定設備是否支持OpenGLES2.0後,就會通知表面視圖需要一個與OpenGLES2.0相兼容的視圖,然後傳遞一個自定義渲染。這個渲染將在任何需要調整表面或者繪制一個新的幀的時候被系統調用。我們還通過傳遞一個不同的渲染來支持OpenGLEs1.x,盡管可能由於APIs的不同,導致我們需要編寫不同的代碼,但在這一節中,我們將只關注OpenGLES2.0。

最後,我們為GLSurfaceView設置內容視圖,它通知Android活動內容應該填補OpenGL表面,代碼如下:

@Override

protectedvoidonResume()

{

super.onResume();

mGLSurfaceView.onResume();

}

@Override

protectedvoidonPause()

{

super.onPause();

mGLSurfaceView.onPause();

}

GLSurfaceView要求我們在任何父Activity的onResume()和onPause()方法被調用的時候調用onResume()和onPause()方法。

6. android OpenGl ES 的問題 我給一個模型貼紋理 在我手機上運行的時候 圖片只能選取256*256像素的

最簡單直接的方法就是把你的圖片丟到 drawble文件夾中(如果沒有,建一個),不要放在drawable-hdpi,drawable-mdpi,或drawable-ldpi文件夾中即可

7. android 怎麼展示3d模型 opengl 還是嵌套u3d

先用3dmax或maya做個模型.然後導出成dae格式.此格式比obj ,3ds等格式都要好.內部是xml語法形式的.可看懂.
你解析之後,用gles 畫出來即可

8. android opengl

1:需要哪些包?
這個很難說,要看你的游戲用到什麼功能。
2:有必要使用opengl嗎?
最好用上,怎麼說opengl也是比java更底層的,圖像的運算處理效率會更高,而且學好opengl,就算你以後轉去做蘋果了,或是你的游戲要開發蘋果版的,也能快速轉型和移植(蘋果也是有opengl的)
3:使用opengl做的2d游戲比使用j2me的game包有哪些優勢及不足??
opengl的優勢上面說了,不足就是會更難入手,首先用opengl的話,你就不能用那些又方便又好用的java介面了,然後要搭建NDK平台,再然後,opengl es(手機上的opengl 叫opengl es)的學習資料很少,很難入門。我個人就用opengl es寫過一個2d的應用,用習慣之後就很順手的。

9. Android OpenGL怎麼載入obj模型文件

你會用opengl顯示一個帶有紋理的三角形嗎?
如果會的話你去了解下obj文件格式就可以自己寫了(obj文件真的很簡單,非常好理解),花不了多少時間。
如果連紋理都不會貼,那還是先把opengl基礎搞定再說。

閱讀全文

與androidopengl模型相關的資料

熱點內容
e4a寫的app怎麼裝蘋果手機 瀏覽:199
海立壓縮機海信系 瀏覽:208
社保如何在app上合並 瀏覽:220
小米加密照片後綴 瀏覽:234
我的世界網易手機怎麼創伺服器 瀏覽:978
載入單頁源碼 瀏覽:930
阿里雲伺服器seo 瀏覽:777
海洋斗什麼時候上線安卓 瀏覽:86
中行app如何查每日匯款限額 瀏覽:840
輸入伺服器sn是什麼意思 瀏覽:725
sha1演算法java 瀏覽:90
asp代碼壓縮 瀏覽:851
按鍵壓槍源碼 瀏覽:180
福建伺服器負載均衡是什麼 瀏覽:697
演算法將所有的島嶼連通 瀏覽:313
51單片機40引腳是什麼 瀏覽:536
手機文件夾大小怎麼調節 瀏覽:309
android自定義日期選擇器 瀏覽:658
租伺服器要看什麼 瀏覽:164
Lightroom文件夾移動以後 瀏覽:968