最通俗的安卓OpenGL教學01——OpenGL的簡單使用
阿新 • • 發佈:2020-12-22
技術標籤:OpenGL ES
快過年了,提前跟大家說一聲 “中秋快樂!”哈哈哈。。。
今天開始,我要寫個關於OpenGL教學的系列文章,目的是想整理一下工作中接觸到的OpenGL知識,同時也想把一些簡單的入門知識分享給大家,方便大家入門。如果你不小心讀到它,產生了些許疑問或者發現了文章中錯誤,再或者想與我有更多溝通交流的,都可以聯絡我。
簡介:OpenGL(Open Graphics Library,譯名:開放圖形庫或者“開放式圖形庫”)是用於渲染2D、3D向量圖形的跨語言、跨平臺的應用程式程式設計介面(API)。 這個介面由近350個不同的函式呼叫組成,用來繪製從簡單的圖形位元到複雜的三維景象。學好了OpenGL ,就可以在那些支援OpenGL的機器上正常使用這些介面,在螢幕上看到繪製的結果。
正式開始,在安卓開發中,最簡單的openGL使用就3步:
- 繼承GLSurfaceView
- 實現介面 GLSurfaceView.Renderer
- 佈局中引用
來,敲程式碼,這裡以實現繪製一屏紅色為例。
1.繼承GLSurfaceView
自定義一個View,新建一個類,繼承GLSurfaceView,在構造方法裡呼叫GLSurfaceView的setRenderer方法。
package com.york.media.opengl.egl;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android. util.AttributeSet;
/**
* author : York
* date : 2020/12/17 21:57
* desc : 最簡單的OpenGL使用方法
*/
public class YGLSurfaceView extends GLSurfaceView {
public YGLSurfaceView(Context context) {
super(context);
}
public YGLSurfaceView(Context context, AttributeSet attrs) {
super (context, attrs);
//1.自定義的 Render,在 Render中實現繪製
YGLRender yGLRender = new YGLRender();
//2.呼叫 GLSurfaceView的setRenderer方法
setRenderer(yGLRender);
}
}
2.實現 GLSurfaceView.Renderer 介面
自定義一個 Render,實現GLSurfaceView.Renderer介面,然後在 Render中完成繪製。
package com.york.media.opengl.egl;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
/**
* author : York
* date : 2020/12/17 21:58
* desc : Render中使用紅色清屏
*/
public class YGLRender implements GLSurfaceView.Renderer {
public YGLRender() {
}
@Override
public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
}
@Override
public void onSurfaceChanged(GL10 gl10, int with, int height) {
GLES20.glViewport(0, 0, with, height);
}
@Override
public void onDrawFrame(GL10 gl10) {
//使用紅色清屏
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glClearColor(1f,0f,0f,1f);
}
}
佈局中引用自定義的GLSurfaceView
最後,在佈局中引用自定義的GLSurfaceView,就可以顯示出紅色了。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.york.media.opengl.egl.YGLSurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
效果是這樣的: