• Android_GLSurfaceView


    使用open GL ES 绘制三角形

    首先自定义一个GLSurfaceView

        class MyGLSurceView extends GLSurfaceView {
    
            public MyGLSurceView(Context context, AttributeSet attrs) {
                super(context, attrs);
            }
    
            public MyGLSurceView(Context context) {
                super(context);
            }
            
        }
        

    再定义一个给GLSurfaceView进行渲染的渲染器Renderer,他是GLSurfaceView的内部接口类。

    class MyRenderer implements GLSurfaceView.Renderer {
    
            @Override
            public void onDrawFrame(GL10 gl) {
                //清除缓存颜色区域
                gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
                //设置模型视图
                gl.glMatrixMode(GL10.GL_MODELVIEW);
                gl.glLoadIdentity();//加载单位矩阵
                //眼睛放置的位置
                //GL10 gl, float eyeX, float eyeY, float eyeZ, 眼睛放置的位置
                //float centerX, float centerY, float centerZ, 相机放置的位置
                //float upX, float upY, float upZ 相机的朝向
                GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0);
                //定义三角形的点x,y,z
                float[] coords = {
                        0f,0.5f,0f,
                        -0.5f,-0.5f,0f,
                        0.5f,-0.5f,0f
                };
                //存到内存缓存区
                ByteBuffer buffer = ByteBuffer.allocateDirect(coords.length *4);
                buffer.order(ByteOrder.nativeOrder());
                //放置顶点坐标
                FloatBuffer floatBuf = buffer.asFloatBuffer();
                floatBuf.put(coords);//将点存放到floatBuffer里面
                buffer.position(0);//指针指向0
                //制定绘制点的颜色
                gl.glColor4f(1f, 0f, 0f, 1f);
                //开始绘制点
                //3 三维点, type数据类型,0跨度,顶点缓冲区
                gl.glVertexPointer(3, GL10.GL_FLOAT, 0, buffer);
                //设置绘制三角形
                gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
                
            }
    
            @Override
            public void onSurfaceChanged(GL10 gl, int width, int height) {
                //设置视口区域
                gl.glViewport(0, 0, width, height);
                //设置绘制模式
                gl.glMatrixMode(GL10.GL_PROJECTION);
                //设置为单例矩阵
                gl.glLoadIdentity();
                float ration = (float)width/(float)height;
                //设置平截头体 左,右,下,上,近平面,远平面
                gl.glFrustumf(-1f, 1f, -ration, ration, 3, 7);
                
            }
    
            @Override
            public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
                //设置清屏颜色
                gl.glClearColor(1, 1, 1, 1);
                //启动绘制顶点数组
                gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
            }
            
        }
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MyGLSurceView glSurceView = new MyGLSurceView(this);
            glSurceView.setRenderer(new MyRenderer());
            setContentView(glSurceView);
        }
    }

    运行效果图如下:

  • 相关阅读:
    α波、β波、θ波和δ波
    出体的真实性
    FreeBSD查看网络情况
    灰色理论预测模型
    主成分分析法
    常用OJ名字+地址(自用)
    2017 年“认证杯”数学中国数学建模网络挑战赛 比赛心得
    Codeforces Round #404 (Div. 2)(A.水,暴力,B,排序,贪心)
    hihoCoder #1053 : 居民迁移(贪心,二分搜索,google在线技术笔试模拟)
    Codeforces Round #408 (Div. 2)(A.水,B,模拟)
  • 原文地址:https://www.cnblogs.com/changkai244/p/4130550.html
Copyright © 2020-2023  润新知