opengles30編程
2d的一般用cocos,語言是c++,3d一般用的是u3d,語言是js或者c#,上面那倆都是跨平台的,要是lz足夠牛x的話直接上opengles
B. 如何在Android上使用OpenGL ES 2.0繪制點
OpenGLES是一個讓人崩潰的東西。在Andorid手機上做3D還就得用它。把我記的一些筆記分享在這里吧:AndroidOpenGLES簡介20011-6-3Android系統使用OpenGL的標准介面來支持3D圖形功能,android3D圖形系統也分為java框架和本地代碼兩部分。本地代碼主要實現的OpenGL介面的庫,在Java框架層,javax.microedition.khronos.opengles是java標準的OpenGL包,android.opengl包提供了OpenGL系統和AndroidGUI系統之間的聯系。Android的本地代碼位於frameworks/base/opengl下,JNI代碼位於frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp和frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp,java類位於opengl/java/javax/microedition/khronos下本地測試代碼位於frameworks/base/opengl/tests。包括angeles、fillrate等14個測試代碼,這些代碼都可以通過終端進行本地調用測試(模擬器中使用adbshell)。OpenGLES1.x固定管線操作,支持glVertexPointer()等函數,不支持GLSL。頭文件在ndk的GLES目錄下,庫文件是libGLESv1_CM.so。OpenGLES2.x可編程管線操作,不兼容1.x,不支持固定管線操作,例如glVertexPointer()等函數。支持GLSL(還必須用這個來編程)。頭文件在ndk的GLES2目錄下,庫文件是libGLESv2.so。OpenGLES學習2011-6-30OpenGL定義了自己的數據類型。應該堅持使用這些OpenGL的數據類型,從而保證可移植性和效率。OpenGLES目前不支持64位數據類型。OpenGLES只支持三邊形。OpenGLES只支持gl開頭的函數,glu庫都不支持。OpenGLES從OpenGL中刪除的功能:1.glBegin/glEnd2.glArrayElement3.顯示列表4.求值器5.索引色模式6.自定義裁剪平面7.glRect8.圖像處理(這個一般顯卡也沒有,FireGL/Quadro顯卡有)9.反饋緩沖10.選擇緩沖11.累積緩沖12.邊界標志13.glPolygonMode14.GL_QUADS,GL_QUAD_STRIP,GL_POLYGON15.glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib16.TEXTURE_1D、TEXTURE_3D、TEXTURE_RECT、TEXTURE_CUBE_MAP17.GL_COMBINE18.自動紋理坐標生成19.紋理邊界20.GL_CLAMP、GL_CLAMP_TO_BORDER21.消失紋理代表22.紋理LOD限定23.紋理偏好限定24.紋理自動壓縮、解壓縮25.glDrawPixels,glPixelTransfer,glPixelZoom26.glReadBuffer,glDrawBuffer,glCopyPixelsOpenGLES2.02011-10-92.0和1.1不兼容。-2.0使用的頭文件是ndk的include目錄下的GLES2目錄,有gl2.h,gl2ext.h,gl2platform.h,而1.1使用的是GLES目錄。-2.0使用的庫文件是ndk的lib目錄下的libGLESv2.so,而1.1使用的是libGLESv1_CM.so。-2.0中取消了很多1.1函數,例如glMatrixModel和glLoadIdentity等。OpenGL著色語言(GLSL――OpenGLShadingLanguage)-使用2.0,必須學此語言。因為很多1.1的函數都被取消了。san-angelesNDKOpenGLES1.1的例子程序2012-3-8SanAngeles,查維基網路,是一個虛構的未來概念城市,位於南加州。常在電影中出現,來源自LosAngeles和SanDiego.該程序的演示效果是,觀察一個宏偉的城市,地面是鏡面有建築倒影,城市中有飛船飛過。前後有5、6個觀察點,而且鏡頭在每個觀察點不停的移動。這個例子,用NDK(C++)調用OpenGLES1.1來繪制了SanAngeles這個城市。基本上全部使用了NDK,Java程序只有1個。用vc2005演示一下,目的通過跟蹤代碼了解一些細節。方法是:-將jni下所有的.h文件,以及demo.c,app-win32.c復制出來,放在一個專門的目錄下,然後改造成用OpenGL的而不是ES的。(或者乾脆刪除大段的繪制代碼,保證編譯通過)首先分析Java代碼-DemoActivity.java,這是唯一的Java文件,它主要需要下列4個jni的介面:-();//初始化-(intw,inth);-();//繪制1幀-();其次分析C++代碼app-android.c-首先,調用了importGLInit(),動態導入OpenGL的庫。-其次,調用了appInit(),在內存中建立了平台無關的3D對象集合。建立方法是用一個數組,用類似畫圓拔高的方式產生諸多三角形。-然後,在每個時鍾周期中調用appRender(),細節是:-prepareFrame(width,height);//准備OpenGLES繪制框架。其實就是清空顏色和深度緩沖,重置投影和模型矩陣。-camTrack();//算好在當前時鍾周期,鏡頭的位置、朝向及焦距等。然後調用gluLookAt來實現。-configureLightAndMaterial();//設置光源和材質-drawModels(-1);//先繪制倒影(其實就是將所有模型z軸倒過來畫)-第一個循環,是畫精緻的物體-第二個循環,是畫運動的物體-drawGroundPlane();//再繪制鏡子一般的地面。在繪制前取消光照,打開混合,然後繪制。繪制後還原狀態。-drawModels(1);//再繪制所有模型-drawFadeQuad();//最後繪制淡出框,用融合的方式畫一個遮住整個視口的2D框,融合系數和時間相關。
C. opengl 4.3 和 OPENGL ES 3.0差別大么,我有OPENGL 4.3的基礎可以不修改地用於OPENGLES3.0 的編程么謝謝
要改,改動不大
D. 如何編程游戲
當下互聯網行業發展迅速,與之相關的產業大多發展都很好,游戲設計的前景自然也是相當不錯的。一個游戲問世要經歷很多環節,劇本設計,原畫創作,場景建模,但核心部分還是編程語言開發。
主要學的內容如下:
1.游戲程序設計:C++程序設計入門;基本數據類型和輸入輸出;流程式控制制語句;數組、指針和引用、函數;程序結構和書寫規;范結構體和聯合體、類;繼承與多態;異常處理與程序調試。
2.演算法與數據結構:演算法分析;數據結構;基本演算法;STL的概念與使用;靜態庫與動態庫;XML庫的使用。
3.Win32程序設計:Windows程序入門;Windows消息;GDI繪圖游戲工具與MFC;網路編程基礎。
4.游戲數學和智能應用:游戲中的坐標系;矢量、矩陣;幾何碰撞;物理模擬;人工智慧與尋路演算法。
5.2D游戲技術與應用:2D游戲技術概論;游戲地圖系統;GUI系統;戰斗系統設計;任務系統;優秀的聲音引擎BASS;Cocos2D-X引擎;Box2D物理引擎。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。

E. [OpengGL]渲染流程和程序流程
這節要說的是Opengles的渲染流程和程序流程,都是一些非常基礎的東西,覺得已經熟悉的同學可以自行忽略。
以下是一幅經典的Opengl渲染管線流程圖
Opengles中包含三種圖元方式,點,線,三角形
包含對頂點數據的處理和轉換
把所有輸入的頂點數據作為輸入,將所有點配裝成指定圖元的形狀
(Opengl特有) 把基本圖元形式的頂點的幾何作為輸入,可以通過產生新頂點構造出新的基本圖元來生成其它形狀
(Opengl特有)可以把基本圖元細分為更多的基本圖形,創建出更加平滑的視覺效果
像素化,圖形映射到屏幕上網路的像素點,生成提供片段給片元著色器處理,光柵化包含一個剪裁處理,會計算舍棄超出定義視窗外的像素
為每一個像素點提供最終的顏色,這里會可以提供紋理題圖,如果是3D場景其可以包含3D場景的一些額外數據,例如光線,陰影
對每個像素點進行深度測試,Alpha測試並進行顏色混合操作,進一步合成整個視窗每一個像素點最終要顯示的顏色和透明度
如果從API的角度來分析,你會發現有更多的操作。
在輸入頂點數據的時候需要線做頂點緩沖,這里可以使用頂點緩沖去對象(VBO),頂點數組對象(VAO)。VBO可以減少IO開銷,並使用數組記錄每一個快數據對應綁定的類型(頂點位置、法向量),這些數據會存放在GPU上。VAO是使用一個數組來存每一個VBO儲存的數據、類型,每次回執時就不需要一個一個傳遞了。
經過片元著色之後,測試和混合也是分很多種
每一個片元在幀緩沖中對應的位置,若干對應的位置裁剪窗口中則將此片元送入下一個階段,否則會丟棄此片元,可以在屏幕上指定區域繪制,不在這片區域不進行繪制
深度測試是用片元的深度值和幀緩沖中儲存的對應位置的片元的深度值進行比較,深度值小的片元會覆蓋或混合深度值大得片元。
模板測試 講回執區域限定在一定的范圍內,一般用於湖面倒影,鏡像等場合
如果程序開啟了Alpha混合,則可以根據上一階段對應的片元和幀緩沖的位置片元進行alpha混合
抖動可以模擬更大的色深,需要自己編寫演算法實現,通過GL_DITHER來控制
opengles並不是直接在屏幕上進行繪制,是預先在幀緩沖區進行繪制,當繪制完之後再下將繪制的結果交換到屏幕上,因此每繪制新的一幀是都需要清除緩沖區的相關數據,否則會產生不正確的繪制效果。
這些都是基本的渲染流程,接下來說一下程序流程,以Android程序為例
這個之前需要了解一下Android中屏幕顯示對Opengles的承載,
SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
值得注意的是Android直接內置了Opengles,並內置了GL10,GL20,GL30的類,封裝了Opengles的Android API,當然其中也屏蔽了一些細節,對於真正去理解opengles實現有一定的差距。
初學者很多會選用GLSurfaceView來做實現,例如簡單繪制圖形是沒問題的。但是我們如果深入一點學習,例如濾鏡,例如錄制播放,還是需要使用SurfaceView來做的,因為SurfaceView可以控制繪制的線程,需要自己定義EGL環境,還有SurfaceTexture綁定,同樣這也是初學者使用時的難點。
使用一個GLSurfaceView來顯示一個三角形為例,這里就屏蔽了EGL、GLThread和SurfaceTexture使用的細節,重點關注在Opengles中的實現。
GLSurfaceView.Render提供三個回調介面
onSurfaceCreated 紋理窗口創建
onSurfaceChanged 視口大小更改
onDrawFrame 繪制
初始化的時候,准備好頂點著色器和片元著色器內容,這裡面頂點做色器和片元著色器可以使用字元串讀取,也可以使用glsl的shader文件來讀取。
載入紋理
創建紋理空間->載入紋理資源->編譯紋理
載入紋理綁定到程序
載入紋理->綁定程序
在GLsurfaceView繪制的時候,調用繪制渲染
清屏->指定使用程序->傳入參數到著色器->允許GPU讀取->繪制圖形
日誌列印
Opengles2.0對應的是Android 2.2(API 8)
Opengles3.0對應的是Android 4.3(API 18)
Opengles3.1對應的是Android 5.0(API 21)
先將頂點著色器和片段著色器文件貼出來(這是用來渲染普通視頻用的),這是使用的OpenGLES3.0版本。(存在兼容性問題),下面只是一部分問題,且這里就不將bug的log寫出來了,這是提示大家正確的寫法。
頂點著色器
片段著色器
1.沒有在著色器文件中標明使用版本的時候默認使用2.0版本。
在上面的著色器文件中添加#version 300 es即表明使用3.0版本,如果不添加則使用默認2.0版本(注意此行必須放在第一行)。同時注意使用3.0的api的時候必須添加此行。
2.3.0中attribute變成了in和out
OpenGL ES 3.0中將2.0的attribute改成了in,頂點著色器的varying改成out,片段著色器的varying改成了in,也就是說頂點著色器的輸出就是片段著色器的輸入,另外uniform跟2.0用法一樣。
3.3.0中使用內置參數gl_FragColor會出問題
這里我們只能自定義顏色向量out vec4 vFragColor;
4.3.0中將GL_OES_EGL_image_external變為了GL_OES_EGL_image_external_essl3
在使用紋理擴展的時候,也就是uniform samplerExternalOES sTexture的時候。在3.0中我們使用GL_OES_EGL_image_external_essl3而不是GL_OES_EGL_image_external。使用相機採集紋理的時候就知道了
5.3.0中將紋理的處理方法統一為texture
在2.0中2D紋理和3D紋理處理分別使用texture2D和texture3D方法,而在3.0後使用texture統一處理。
6.in或者out變數等不能在函數內(如main函數內)聲明
OpenglES3.0新特性
