導航:首頁 > 操作系統 > androidopengl渲染

androidopengl渲染

發布時間:2022-06-29 19:20:18

Ⅰ 在android上,Unity3d底層是調用opengl es庫嗎

OpenGLES是Unity在現在的Android、ios等類似設備上用來渲染的底層庫,是OpenGL的一個子集。OpenGLES在渲染能力、功耗設計中都考慮了移動設備的特殊性,所以現在的移動設備都是基於OpenGLES1.1或者2.0來渲染。在Windows(MAC、Linux)上,Unity會根據自己跑的來決定用DX還是OpenGL,因為是你來做,也會想著盡量能把最好的硬體都利用上,對吧?!所以,OpenGLES跟Unity的關系也就很明了,Unity會根據不同的運行環境,選擇不同的渲染庫,OpenGLES是其中的一個庫,而已。

Ⅱ android opengl 怎麼渲染文字

紋理渲染文本是比什麼雪碧文本簡單演示使它看起來像,基本思想是使用帆布類來呈現一個點陣圖,然後通過一個OpenGL紋理的點陣圖:

java">//Createanempty,mutablebitmap
Bitmapbitmap=Bitmap.createBitmap(256,256,Bitmap.Config.ARGB_4444);
//
Canvascanvas=newCanvas(bitmap);
bitmap.eraseColor(0);

//
//
Drawablebackground=context.getResources().getDrawable(R.drawable.background);
background.setBounds(0,0,256,256);
background.draw(canvas);//drawthebackgroundtoourbitmap

//Drawthetext
PainttextPaint=newPaint();
textPaint.setTextSize(32);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff,0x00,0x00,0x00);
//drawthetextcentered
canvas.drawText("HelloWorld",16,112,textPaint);

//Generateonetexturepointer...
gl.glGenTextures(1,textures,0);
//...andbindittoourarray
gl.glBindTexture(GL10.GL_TEXTURE_2D,textures[0]);

//CreateNearestFilteredTexture
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR);

//,e.g.GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_S,GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_T,GL10.GL_REPEAT);

//-
GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bitmap,0);

//Cleanup
bitmap.recycle();

Ⅲ 誰有 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

Ⅳ android中能否有兩個opengl上下文

不能。
OpenGL本身就是一個非常龐大的狀態機(State Machine) ,其狀態通常被稱為OpenGL上下文(Context)。它裡面保存了一系列的變數用來描述OpenGL此刻需要如何運行,比如拍照時候要開啟濾鏡功能等等。
OpenGL使用C語言編寫的,進而他的Api的封裝也都是面向過程的,其函數本質上都是對OpenGL上下文狀態機中的某個狀態或者對象進行操作。
應用程序中可以創建多個不同的上下文,他們分別在各自的線程中使用。上下文之間共享紋理,緩沖區等資源,採用這中方案更為高效,因為它避免了反復切換上下文,或者大量修改渲染狀態所造成的較大的開銷。

Ⅳ Android開發使用OPENGL為什麼會比原生更耗電

對,沒錯。OpenGLES支持Java作為宿主語言。不過如果是OpenGLES2.0的話,需要用到渲染管線時可能需要一些著色器語言作為支撐。而樓上所說的物理引擎都是需要花大價錢獲得使用權的,但像Jbullet這種開源免費的3D引擎就是使用java實現的,網上可以免費下到jar包。本人也從事過android平台上的3D游戲開發,希望能幫到你。^_^

Ⅵ android skia與opengl es 都可以畫2d圖嗎

一、基礎知識: OpenGL ES目前只支持三角形,但任何多邊形都可拆分成多個三角形,所以無所謂這個限制的存在。 1.OpenGL中的坐標點: 每一個坐標點由(X, Y, Z)組成。 定義一個三角形的頂點數組: [java] int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點 int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點定義一個正方形的頂點數組: [java] //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); 2.OpenGL中的坐標系: 當調用gl.glLoadIdentity()函數之後,實際上是將當前點移動到了屏幕中心, X坐標軸從左至右,Y坐標軸從下至上,Z坐標軸從里至外。 OpenGL屏幕中心的坐標值是X軸和Y軸的0.0f點。 中心左邊的坐標值是負值,右邊是正值; 移向屏幕頂端是正值,移向屏幕底端是負值; 移入屏幕深處是負值,移出屏幕則是正值。 在繪制時,我們可以使用glTranslatef函數來移動畫筆的位置,從而使圖形顯示在我們 想要的位置。 [java] gl.glTranslatef(-1.5f, 0.0f, -6.0f); gl.glTranslatef(-1.5f, 0.0f, -6.0f);此函數,就是將畫筆沿X軸左移1.5f個單位,Y軸保持不變,Z軸向屏幕裡面移動6.0f個單位。 將視圖推入屏幕背後足夠的距離以便可以看見全部的場景,這里需要注意的是屏幕內移動的單位 必須小於我們前面通過glFrustumf方法設置的最遠距離,否則超出視角范圍,將顯示不出來。 3.OpenGL中的頂點數組: 在實際畫圖時,我們往往需要定位幾個點,然後讓OpenGL以此為基準來畫圖。在設置頂點位置前, 我們需要按照以下步驟來啟用我們的頂點數組: ①開啟頂點設置動能: [java] gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);②設置頂點數組: [java] view plainprint?gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer);glVertexPointer(int size, int type, int stride, Buffer pointer) size用於描述頂點的尺寸(本例使用XYZ,所以是3),type描述頂點的類型,固定的使用 GL_FIXED,stride描述步長,pointer指向頂點緩存,即我們創建的頂點數組。 ③繪制頂點: [java] gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //繪制四邊形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //繪制四邊形glDrawArrays(int mode, int first, int count) mode指明繪制的模式,first和count分別是開始的位置和要繪制的頂點計數。 4、實例: 畫一個三角形和正方形。 根據我們上一節的框架分析,目前,我們只需將精力集中在onDrawFrame方法裡面的繪圖操作部分了。 1. 界面編輯(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> 2.代碼編輯 (srcwyfzclMyActivity.java): [java] package wyf.zcl; import android.app.Activity; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; import android.os.Bundle; public class Activity01 extends Activity { Renderer render = new GLRender(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(render); setContentView(glView); } } package wyf.zcl; import android.app.Activity; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; import android.os.Bundle; public class Activity01 extends Activity { Renderer render = new GLRender(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(render); setContentView(glView); } } (srcwyfzclGLRender.java): [java] package wyf.zcl; import java.nio.IntBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer; public class GLRender implements Renderer { int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點 //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); @Override public void onDrawFrame(GL10 gl) { // 清除屏幕和深度緩存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(-1.5f, 0.0f, -6.0f); // 允許設置頂點 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 設置三角形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(1.5f, 0.0f, -6.0f); //設置和繪制正方形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消頂點設置 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float ratio = (float) width / height; //設置OpenGL場景的大小 gl.glViewport(0, 0, width, height); //設置投影矩陣 gl.glMatrixMode(GL10.GL_PROJECTION); //重置投影矩陣 gl.glLoadIdentity(); // 設置視口的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 選擇模型觀察矩陣 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型觀察矩陣 gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 啟用陰影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 設置深度緩存 gl.glClearDepthf(1.0f); // 啟用深度測試 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度測試的類型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告訴系統對透視進行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); } } package wyf.zcl; import java.nio.IntBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer; public class GLRender implements Renderer { int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點 //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); @Override public void onDrawFrame(GL10 gl) { // 清除屏幕和深度緩存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(-1.5f, 0.0f, -6.0f); // 允許設置頂點 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 設置三角形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(1.5f, 0.0f, -6.0f); //設置和繪制正方形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消頂點設置 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float ratio = (float) width / height; //設置OpenGL場景的大小 gl.glViewport(0, 0, width, height); //設置投影矩陣 gl.glMatrixMode(GL10.GL_PROJECTION); //重置投影矩陣 gl.glLoadIdentity(); // 設置視口的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 選擇模型觀察矩陣 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型觀察矩陣 gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 啟用陰影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 設置深度緩存 gl.glClearDepthf(1.0f); // 啟用深度測試 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度測試的類型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告訴系統對透視進行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); } } 3.運行效果:

閱讀全文

與androidopengl渲染相關的資料

熱點內容
國產系統怎麼解壓 瀏覽:552
戰雙程序員 瀏覽:483
him觸摸編程軟體 瀏覽:931
植物大戰僵屍存檔怎麼轉移安卓 瀏覽:852
java棧的元素 瀏覽:737
程序員與籃球事件 瀏覽:675
app反編譯不完整 瀏覽:788
電腦上的文件夾怎麼調整 瀏覽:7
伺服器無響應是什麼原因呀 瀏覽:984
wd文檔里的app怎麼製作 瀏覽:513
電腦里的文件夾沒有了一般能恢復嗎 瀏覽:418
哪裡有配加密鑰匙的 瀏覽:210
伺服器開不了機怎麼把數據弄出來 瀏覽:958
gif動態圖片怎麼壓縮 瀏覽:521
黑猴子棒球壓縮文件解壓密碼 瀏覽:631
如何讓app適應不同的手機屏幕大小 瀏覽:10
蘋果手機如何給安卓手機分享軟體 瀏覽:761
蘋果電腦怎麼運行騰訊雲伺服器 瀏覽:59
明日之後沙石堡命令助手 瀏覽:261
蛋糕店用什麼樣的app 瀏覽:877