OpenGL ES(一)绘制三角形

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值