OpenGL好庞大,画个三角形画的吐血,理论里面涉及到的数学知识比较多,主要是三角函数以及矩阵论里面的东西,不过反复用来用去也就那么多,补充一下这方面的知识也能很快上手,好吧,为了以后能够随心所欲的画图,我忍了!!!
1,创建布局,加载SurfaceView控件
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyGLsurfaceView view = new MyGLsurfaceView(this);
//renderer:渲染器
view.setRenderer(renderer);
//设置视图
setContentView(view);
}
class MyGLsurfaceView extends GLSurfaceView{
public MyGLsurfaceView(Context context) {
super(context);
}
public MyGLsurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
2,自定义渲染器MyRenderer
Renderer是个接口,OpenGL开发,Renderer是最重点的,重中之重!!!SurfaceView只是个载体.
因此可以view.setRenderer(new MyRenderer());
Ctrl进入setRenderer可以查到Rebderer来自类
android.opengl.GLSurfaceView.Renderer
自定义渲染器
MyRenderer implements android.opengl.GLSurfaceView.Renderer
实现里面的三个方法:
onSurfaceCreated,onSurfaceChanged,onDrawFrame
class MyRender implements android.opengl.GLSurfaceView.Renderer{
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
}
@Override
public void onDrawFrame(GL10 gl) {
}
}
2.1,onSurfaceCreated表层创建
//表层创建时
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//设置背景色,透明度1为完全不透明
gl.glClearColor(0, 0, 0, 1);
清屏,设置SurfaceView的背景色
gl.glClearColor(red, green, blue, alpha);
2.2,onSurfaceChanged画面大小改变时调用
//表层size改变时,即画面的大小改变时调用
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
//设置视口,输出画面的区域,在控件的什么区域来输出,x,y是左下角坐标
gl.glViewport(0, 0, width, height);
float ratio =(float) width /(float) height;
//矩阵模式,投影矩阵,openGL基于状态机
gl.glMatrixMode(GL10.GL_PROJECTION);
//加载单位矩阵
gl.glLoadIdentity();
//平截头体
gl.glFrustumf(-1f, 1f, -ratio, ratio, 3, 7);
}
设置视口,即输出画面的区域,一般来说按照SurfaceView控件的大小来输出,也可在SurfaceView里面的一个小区域输出
x,y是左下角的坐标(0,0)点,
gl.glViewport(x, y, width, height);
设置平截头体(左,右,下,上,近平面,远平面)
gl.glFrustumf(left, right, bot