OpenGLES 绘制三角形

本文档详述了在Android上使用OpenGLES绘制三角形的过程,包括基本步骤、错误排查以及如何处理屏幕旋转。在绘制过程中,由于粗心将着色器类型设错导致无法正常绘制。主要步骤涉及GL_SurfaceView的使用、GL_SurfaceView.Renderer接口的实现,以及顶点坐标、颜色的定义,还有着色器GLSL代码的编写。在初始化和绘制阶段,分别进行了顶点缓存、编译程序的创建和绘制操作。同时,还介绍了如何设置相机和投影以确保屏幕旋转后的比例正常。
摘要由CSDN通过智能技术生成

OpenGLES 绘制三角形

需要用到OpenGLES ,所以在安卓开发的指导文档里学习。但是在学习第一个绘制三角形时,一切流程似乎都是对的,但是就是不能够正常绘制三角形,前后卡了快三个钟,一开始对照官方文档每行代码一一排查都没有找到,休息了快两个钟,然后在CSDN找了一篇类似的教程Android OpenGL ES2.0(一):详细讲解如何绘制一个三角形,再一次鼓起勇气一一同样对比排查。终于发现原因所在:将着色器的类型设置错误,本应如下,应为“GL_VERTEX_SHADER”,但我依赖于自动输入又不检查,粗心大意,写成了“GL_SHADER_TYPE ”

顺便回忆一下,绘制图形的基本步骤。

基本步骤

1.GL_SurfaceView 一个view 本身空白,需要Render进行渲染,可以理解为一块画布
2.应用了GL_SurfaceView.Renderer接口的自定义渲染类,用于图形绘制。
应用此接口需要重写其中三个类

  • onSurfaceCreated 初始化,绘制三角形中,三角形对象将首先在此进行对象实例的创建。
  • onSurfaceChanged 当屏幕尺寸发生变化是调用,如竖屏转横屏。
  • onDrawFrame 绘制图像

三角形的绘制:

1.定义顶点坐标
  • 个数:3
  • 坐标:以浮点数组存储,每个点使用3个浮点数记录,分别为x,y,z
  • 颜色:RGBA格式,长度为4的浮点数组
  • 相应的着色器GLSL代码,具体使用查阅文档此处应有顶点着色的vertexShader与用于颜色着色的fragmentShader
2.初始化

此处代码在onSurfaceCreated中使用,因为绘制的图形多样,安卓建议建立图形类,通过调用构造函数进行,三角形的初始化包括:

  • 将顶点浮点数组转为浮点缓存类FloatBuffer,以提高效率
  • 建立空白的编译程序mProgram =GLES20.glCreateProgram,将着色程序字段添加至其中。然后注册关联
绘制

此处代码在onDrawFrame中使用,此处调用三角形类的draw函数,包括:

  • 使用初始化阶段定义的mProgram
  • 定义位置句柄与颜色句柄,取出编译的程序mProgram中的位置变量与颜色变量。
  • 启动句柄,赋值,绘制。

在这里插入图片描述

增加投影与相机

保证屏幕旋转时比例正常

  • 设置相机格式 onDrawFrame
        Matrix.setLookAtM(viewMatrix, //接受相机变换矩阵
                0,            //变换矩阵的起始位置,偏移量
                0,0,-3,//相机位置
                0f,0f,0f,//观测点位置
                0f,1.0f,0.0f//相机顶端方向
                );

-设置投影格式 onSurfaceChanged

        Matrix.frustumM(projectionMatrix ,//接受投影的矩阵,可以理解为投影的位置设置
                0,                  //变换矩阵的起始位置(偏移量)
                -ratio,ratio,-1,1,//相对观察点的左右下上四个方向距离
                3,7             //相对观察点的近面与远面距离
        );

  • 相机与投影矩阵相乘,得到变换时的数据样版
Matrix.multiplyMM(vPMatrix,0,projectionMatrix,0,viewMatrix,0);

        mTriangle.draw(vPMatrix);
  • 获取句柄,进行渲染
        vPMatrixHanle = GLES20.glGetUniformLocation(mProgram,"uMVPMatrix");
        GLES20.glUniformMatrix4fv(vPMatrixHanle,1,false,mvpMatrix,0);

在这里插入图片描述

本博文纯粹记录,本身为菜鸟,如有不对,欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值