自定义一个活动页面继承GLSurfaceView

import android.content.Context;
import android.opengl.GLSurfaceView;public class DemoGLSurfaceView extends GLSurfaceView {public DemoGLSurfaceView(Context context) {super(context);DemoGLRenderer renderer = new DemoGLRenderer();setRenderer(renderer);}}

自定义一个renderer继承Renderer

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView.Renderer;public class DemoGLRenderer implements Renderer {private float[] triangleData = new float[] {0.1f, 0.6f , 0.0f , // 上顶点-0.3f, 0.0f , 0.0f , // 左顶点0.3f, 0.1f , 0.0f  // 右顶点
    };private FloatBuffer triangleDataBuffer;private float[] recData = new float[] {0.4f, 0.4f , 0.0f, // 右上顶点0.4f, -0.4f , 0.0f, // 右下顶点-0.4f, 0.4f , 0.0f, // 左上顶点    -0.4f, -0.4f , 0.0f // 左下顶点
    };private FloatBuffer recDataBuffer;private float[] pentacle = new float[]{0.4f , 0.4f , 0.0f,-0.2f , 0.3f , 0.0f,0.5f , 0.0f , 0f,-0.4f , 0.0f , 0f,-0.1f, -0.3f , 0f};private FloatBuffer pentacleDataBuffer;public DemoGLRenderer() {ByteBuffer byteBuf = ByteBuffer.allocateDirect(triangleData.length * 4);byteBuf.order(ByteOrder.nativeOrder());triangleDataBuffer = byteBuf.asFloatBuffer();triangleDataBuffer.put(triangleData);triangleDataBuffer.position(0);byteBuf = ByteBuffer.allocateDirect(recData.length * 4);byteBuf.order(ByteOrder.nativeOrder());recDataBuffer = byteBuf.asFloatBuffer();recDataBuffer.put(recData);recDataBuffer.position(0);byteBuf = ByteBuffer.allocateDirect(pentacle.length * 4);byteBuf.order(ByteOrder.nativeOrder());pentacleDataBuffer = byteBuf.asFloatBuffer();pentacleDataBuffer.put(pentacle);pentacleDataBuffer.position(0);}@Overridepublic void onDrawFrame(GL10 gl) {// 清除屏幕缓存和深度缓存gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);// 启用顶点座标数据
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);// 启用顶点颜色数据
        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);// 设置当前矩阵堆栈为模型堆栈,
        gl.glMatrixMode(GL10.GL_MODELVIEW);// 重置当前的模型视图矩阵
        gl.glLoadIdentity();gl.glTranslatef(-0.32f, 0.35f, -1f);// 设置顶点的位置数据gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleDataBuffer);// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);// 重置当前的模型视图矩阵
        gl.glLoadIdentity();gl.glTranslatef(0.6f, 0.8f, -1.5f);// 设置顶点的位置数据gl.glVertexPointer(3, GL10.GL_FLOAT, 0, recDataBuffer);// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);// 重置当前的模型视图矩阵
        gl.glLoadIdentity();gl.glTranslatef(0.4f, -0.5f, -1.5f);gl.glDisableClientState(GL10.GL_COLOR_ARRAY);// 设置顶点的位置数据gl.glVertexPointer(3, GL10.GL_FLOAT, 0, pentacleDataBuffer);// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 5);gl.glFinish();gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {// 设置3D视窗的大小及位置gl.glViewport(0, 0, width, height);// 将当前矩阵模式设为投影矩阵
        gl.glMatrixMode(GL10.GL_PROJECTION);// 初始化单位矩阵
        gl.glLoadIdentity();// 计算透视视窗的宽度、高度比float ratio = (float) width / height;// 调用此方法设置透视视窗的空间大小。gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);}@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {// 关闭抗抖动
        gl.glDisable(GL10.GL_DITHER);// 设置系统对透视进行修正
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);gl.glClearColor(0, 0, 0, 0);// 设置阴影平滑模式
        gl.glShadeModel(GL10.GL_SMOOTH);// 启用深度测试
        gl.glEnable(GL10.GL_DEPTH_TEST);// 设置深度测试的类型
        gl.glDepthFunc(GL10.GL_LEQUAL);}}

主页面代码

import com.wisher.opengl.surfaceview.DemoGLSurfaceView;import android.app.Activity;
import android.os.Bundle;public class DemoActivity01 extends Activity {private DemoGLSurfaceView view;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);view = new DemoGLSurfaceView(this);setContentView(view);}
}

程序运行效果图

文章部分代码源自李刚《疯狂android讲义》

转载于:https://www.cnblogs.com/wisher/p/3279993.html

[Android]OpenGL绘制2D几何图形相关推荐

  1. Android中绘制简单几何图形和路径Path

    背景 我的博客:http://zhangsunyucong.top 马上就到2018年过年了,然后我又刚好有兴致,就来玩玩Android中的简单几何图形的绘制和使用Path类来绘制路径. Path和C ...

  2. Android openGl开发详解(一)——绘制简单图形

    1. What? openGl是什么?openGl ES又是什么? 2. How? Android中的openGL 如何使用? 3. GlSurfaceView是什么? GLSurfaceView的作 ...

  3. SurfaceView简单理解,Android混淆,Android openGl开发详解简单图形的绘制,

    SurfaceView允许你在非ui线程中去绘制. SurfaceView的帧率可以操作60FPS 在要求实时性比较高的游戏开发中,显然,view的ondraw是满足不了你的,这时候只能是用Surfa ...

  4. Android OpenGL ES(十一)绘制一个20面体 .

    前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形.其它所有复杂的2D或3D图形都是由这些基本图形构成. 本例介绍如何使用三角形构造一个正20面体.一个正20面体,有12个顶点,20 ...

  5. android openGL ES2 一切从绘制纹理開始

    纹理.在openGL中,能够理解为载入到显卡显存中的图片.Android设备在2.2開始支持openGL ES2.0.从前都是ES1.0 和 ES1.1的版本号.简单来说,openGL ES是为了嵌入 ...

  6. OpenGL与3D开发-绘制2D图形

    绘制2D图形 文章目录 绘制2D图形 1.OpenGL ES在Android中涉及的关键类 1.1.GLSurfaceView 1.2.GLSurfaceView.Renderer 接口 1.3. G ...

  7. java opengl es_Java-Android-使用openGL ES绘制3D然后绘制2D

    我找到了解决方案,但我忘了发布了:)对不起 package at.bartinger.opengl; import javax.microedition.khronos.egl.EGLConfig; ...

  8. Android OpenGL ES 2.0绘制简单三角形

    实现步骤 l  实现一个工具类ShalderUtil,用于将着色器代码加载进显卡进行编译 l  实现一个三角形Triangle类 在该类中加载着色器.初始化顶点数据.初始化着色器以及绘制三角形方法 l ...

  9. Android OpenGL ES(十)绘制三角形Triangle .

    三角形为OpenGL ES支持的面,同样创建一个DrawTriangle Activity,定义6个顶点使用三种不同模式来绘制三角形: float vertexArray[] = {-0.8f, -0 ...

  10. android opengl es 绘制位图字体

    Android中绘制字体,用到了canvas,下面代码里面为我写的实例,几乎每行代码都有注释. 1.Activity 类 import android.app.Activity; import and ...

最新文章

  1. 麦肯锡顾问深度工作安排:将工作可视化
  2. 2020长沙“科技之星”榜单重磅揭晓,近百家企业凭实力“出道”!
  3. 这24个高频存储问题,你一定要知道!如何不停机,安全更换数据库?大厂都怎么做MySQL到Redis同步的?...
  4. 回归评价指标MSE、RMSE、MAE、R-Squared
  5. Android判断应用是否拥有某种权限
  6. 分割2021PanopticFCN
  7. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
  8. 【Android 逆向】IDA 工具使用 ( 函数窗口 Function window | 创建引用图 Xrefs graph to | 创建调用图 Xrefs graph from )
  9. hadoop datajoin
  10. mysql监控php脚本
  11. WCF学习之旅----基础篇之EnterpriseServices
  12. 《软件开发的形式化方法-古天龙》笔记(1)
  13. 用Jupyter—Notebook爬取网页数据实例1
  14. 建站教程|小鸟云服务器搭建Wordpress站点
  15. 使用Bundle校验接口入参
  16. 云测平台iOS环境搭建
  17. 为何苹果电脑虚拟机如此受欢迎
  18. Xcode的调试技巧
  19. 百度云盘云知梦php_[云知梦]WEB前端开发_WEB前端新手入门视频教程[百度云盘]
  20. cad2014打开文件崩溃_CAD崩溃但文件未保存的解决方法

热门文章

  1. 凸优化第二章凸集 2.4广义不等式
  2. 凸优化-Proximal GD
  3. 网易2018校招内推编程题 小易喜欢的数列
  4. 矩阵运算中的trick
  5. 一道很有趣的多元函数求极值问题
  6. java中的 关键词vali_Java中的关键字volatile详解
  7. 提取二值图像中信号骨架matlab,matlab 二进制图像轮廓提取
  8. Spring boot Redis客户端 乱码
  9. Cordova - 彻底搞定安卓中的微信支付插件!
  10. [CF888G] Xor-mst (Trie 树,最小生成树)