opengl3dandroid
1. 安卓手機游戲開發需要學什麼
在瑭錦Tanjurd要學Android游戲編程 游戲是Android應用商店中的一個大分類,也是智能手機的一大亮點。需要學習SurfaceView、動畫繪制、圖形圖像的碰撞和檢測、地圖的設計、數據存儲、感測器編程、網路編程、多媒體編程、事件處理等等的回顧,編寫2D游戲。通過對OpenGL3D內容的介紹,了解在Android上開發3D游戲的基本技能。學習游戲引擎libgdx,了解游戲引擎的用法。
2. 誰有 Android 3D游戲開發(基礎篇)——Opengl ES游戲引擎實現 的視頻教程
你可以先去【繪學霸】網站找「游戲設計/游戲製作」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-245494221972772924
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y04r-245494221972772924
在「游戲設計/游戲製作」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
3. Android OpenGLES3繪圖 - 音頻可視化(模仿MIUI系統效果)
小米手機播放音樂時鎖屏頁面可以設置音頻可視化效果,這是用OpenGL繪制出來的,我們來實現一下。
首先簡單分析一下原理:
圖形的每一行代表一個聲音片段,它就是一個一維數組,按照數值大小繪制不同的高度,就形成了一條「山脈」;獲取到下一個聲音片段後,將它繪制到下面一行,然後畫面整體向上滾動就可以了。整體類似於繪制一張游戲里常見的3D地形圖。
創建一個MediaPlayer,它可以直接讀取res/raw裡面的音頻文件,start()開始播放
Visualizer是Android SDK裡面提供的音頻分析工具,它可以直接獲取播放的音頻的波形和頻譜。onWaveFormDataCapture回調方法里返回的是原始的PCM波形數組,onFftDataCapture回調方法里返回的是經過快速傅里葉方法轉換後的聲音頻譜數組,數組的第一位是直流分量,後面是不同頻率的數值。
每次獲取到的是一組聲音數據,將它傳給Render繪制。
首先確定圖形的長寬,寬度w其實是由每組音頻的數組長度決定,可以由Visualizer.getCaptureSizeRange()[0]獲取,這里獲取的是最小的數組,也可以用Visualizer.getCaptureSizeRange()[1]獲取最大的數組;長度h可以自己設置想展示多長。
繪制地形圖也就是繪制w * h * 2個三角形,創建vao、vbo和ebo,由於頂點的位置都是固定的,可以在頂點著色器中用gl_VertexID獲取,所以vbo裡面不用傳頂點數據,直接傳聲音數組。
由於圖形是不斷刷新最後一行並向上滾動的,那麼需要使用一個隊列,為了每一幀數據改變最小,不至於進行大量的數組復制和移動。我們 用ByteBuffer vertexBuffer模擬一個循環隊列,使用一個行號int lineNum來標記隊列的頭部。每添加一行數據後,lineNum會加上w,這樣ByteBuffer分成了兩部分:lineNum * w之後的是新舊數據,之前的是舊數據 。
現在我們需要將數據從主內存(vertexBuffer)復制到GPU顯存(vbo)。vertexBuffer里是一個循環隊列,而vbo裡面只能順序保存(因為ebo序號是順序的,vbo不是順序圖形就會錯亂),更新vbo數據緩存的glBufferSubData方法支持設置偏移位置部分更新。那麼我們 先將vertexBuffer定位到lineNum * w,將它後面的舊數據復制到vbo的前面;然後將vertexBuffer定位到0,將剩下的新數據復制到vbo的後面 。這樣就保證了繪制時從上到下,從舊到新。
為了讓顏色更豐富,這里用了地形圖中常用的熱度漸變色數組。
理論上音頻數值是unsigned byte格式的,但是著色器不支持byte格式,我直接用int vPosition接收數據,然而數值范圍不再是0~255了,這有點奇怪,我沒有深入研究。簡單測試了一下,發現取int的前8位,再進行一點比例縮放,用它去漸變色數組里取顏色,會取得較好的顯示效果。
頂點著色器
shader_audio_v.glsl
將顏色傳給片段著色器顯示
shader_audio_f.glsl
最終效果如下圖,錄屏設置的碼率比較低,實際上是很清晰的。
完整項目在 SurfacePaint 項目下的 opengles3 模塊里的audio。
4. 安卓手機游戲開發需要學什麼
游戲開發需要學習:基礎公共課、專業技能課、游戲程序方向。
1、基礎公共課
Direct 3D程序開發基礎、3D游戲開發技術實戰、游戲引擎的修改與使用網路通訊、資料庫及游戲伺服器、行業規劃及職業素質、游戲綜合項目實戰訓練、基地頂崗項目實訓。
5. 手機openGl是什麼意思
編程作圖
6. Android OpenGLES3繪圖 - 幀緩沖
普通的OpenGL繪圖時是繪制到當前幀上面,由於GL環境跟當前屏幕進行了關聯,也就直接繪制到屏幕了。這樣有兩個問題:1. 如果有的幀計算得快,有的計算得慢,而屏幕刷新率是固定的,就會拖慢整體幀率;2. 在著色器裡面只能處理當前位置的點,沒辦法處理當前點跟其他點的關系。
如果將OpenGL計算後的幀緩存起來,不直接繪制。那麼就可以利用雙緩沖或多緩沖技術穩定幀率;在著色器裡面可以從緩存幀讀取所有點,就可以進行一些相對位置處理,比如將當前點跟周圍點顏色計算平均值,進行圖像模糊。這就是幀緩沖。
給一個普通的繪制添加幀緩沖也很方便,基本不影響原來的繪制。假設原來繪制的是三角形,那麼先配置一下幀緩沖,可以配置成2D紋理,然後進行原來的繪制,三角形就會繪制到緩沖幀的紋理上面,最後將這個2D紋理繪制到屏幕上就可以了。
實現方法:
原圖形是很多個旋轉的3D箱子
創建幀緩沖對象fbo,創建紋理對象tcbo和渲染緩沖對象rbo,將它們倆跟fbo綁定,檢查一下是否成功。
創建頂點數組緩沖對象vbo,繪制一個帶紋理的正方形,注意紋理需要用上一步創建的紋理對象tcbo
先綁定幀緩沖對象,開啟深度測試,用原圖形Shader繪制3D箱子圖案;然後解綁幀緩沖對象fbo,關閉深度測試(綁定當前屏幕),用幀緩沖Shader繪制fbo中的紋理。繪制結果跟原圖形完全一致。
有了幀緩沖後,可以在幀緩沖的片段著色器上做一些簡單的圖像處理:反相、灰度;核效果:模糊、銳化、邊緣檢測等。
7. 在Android上用OpenGL ES開發3D游戲用什麼語言java or C/C++
對者族,沒錯。OpenGL ES支持Java作為宿主語言。不過如果是絕搏OpenGL ES2.0的話,需要用到渲染管線時可能需要一些著色器語言作為支撐。 而樓上首宏弊所說的物理引擎都是需要花大價錢獲得使用權的,但像Jbullet這種開源免費的3D引擎就是使用java實現的,網上可以免費下到jar包。本人也從事過android平台上的3D游戲開發,希望能幫到你。^_^