GLSurfaceView android 3D 繪圖
要了解如何在android中實作繪圖,要先知道兩個物件
一個是 GLSurfaceView
一個是 GLSurfaceView.Renderer
GLSurfaceView 實作繪圖的視窗,是繼承自SurfaceView的View。因為是繼承自SurfaceView所以一樣有底下這些常用的方法
setRenderer()
onPause()
onResume()
queueEvent()
surfaceChanged()
surfaceCreated()
surfaceDestroyed()
... 其它不多做贅述
GLSurfaceView.Renderer 繪圖物件的處理,所有繪圖的部分都在這裡處理,其下有三個方法
onDrawFrame(GL10 gl) //畫圖函數放在這裡。
onSurfaceChanged(GL10 gl, int width, int height)
onSurfaceCreated(GL10 gl, EGLConfig config) //Render被創立之後,初始化的函數都放在這裡。函數會被執行一次。
主要的Activity,要先把一個GLSurfaceView建入contentView。在這裡就是Oglv。
public class OpenglTest extends Activity {
private Oglv oglv;
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
oglv = new Oglv(this);
setContentView(oglv);
}
}
建一個新的class,名為Oglv,繼承自GLFurfaceView
class Oglv extends GLSurfaceView {
private OglvRender oglvRender;
public Oglv(Context mc){
super(mc);
oglvRender = new OglvRender();
setRenderer(oglvRender);
}
// 觸控面版時,手機螢幕隨坐標變色
@Override
public boolean onTouchEvent(final MotionEvent event){
queueEvent(new Runnalbe(){
public void run(){
oglvRender.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);
}
});
return true;
}
}
建一個class,名為oglvRender, 繼承自GLSurfaceView.Render
一個是 GLSurfaceView
一個是 GLSurfaceView.Renderer
GLSurfaceView 實作繪圖的視窗,是繼承自SurfaceView的View。因為是繼承自SurfaceView所以一樣有底下這些常用的方法
setRenderer()
onPause()
onResume()
queueEvent()
surfaceChanged()
surfaceCreated()
surfaceDestroyed()
... 其它不多做贅述
GLSurfaceView.Renderer 繪圖物件的處理,所有繪圖的部分都在這裡處理,其下有三個方法
onDrawFrame(GL10 gl) //畫圖函數放在這裡。
onSurfaceChanged(GL10 gl, int width, int height)
onSurfaceCreated(GL10 gl, EGLConfig config) //Render被創立之後,初始化的函數都放在這裡。函數會被執行一次。
主要的Activity,要先把一個GLSurfaceView建入contentView。在這裡就是Oglv。
public class OpenglTest extends Activity {
private Oglv oglv;
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
oglv = new Oglv(this);
setContentView(oglv);
}
}
建一個新的class,名為Oglv,繼承自GLFurfaceView
class Oglv extends GLSurfaceView {
private OglvRender oglvRender;
public Oglv(Context mc){
super(mc);
oglvRender = new OglvRender();
setRenderer(oglvRender);
}
// 觸控面版時,手機螢幕隨坐標變色
@Override
public boolean onTouchEvent(final MotionEvent event){
queueEvent(new Runnalbe(){
public void run(){
oglvRender.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);
}
});
return true;
}
}
建一個class,名為oglvRender, 繼承自GLSurfaceView.Render
public class oglvRender implements GLSurfaceView.Renderer {
private float red = 0f;
private float green = 0f;
private float blue = 0f;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
@Override
public void onSurfaceChanged(GL10 gl, int w, int h) {
gl.glViewport(0, 0, w, h);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClearColor(red, green, blue, 1.0f); //寫入背景顏色
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
//設定背景顏色
public void setColor(float r, float g, float b){
red=r;
green=g;
blue=b;
}}
結果如下:
留言
張貼留言