自定义一个活动页面继承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. [翻译] ASP.NET内幕 - IIS处理模型
  2. vex机器人比赛 一队人数_VEX世锦赛中国区总决赛在渝闭幕 重庆晚报记者带你了解VEX机器人的那些事...
  3. idea 中 git 修改了文件却无法提交(No Changes detected)
  4. python中strip(),lstrip(),rstrip()函数的讲解
  5. python各种模块的使用
  6. kyma上service catalog的安装部署方法
  7. 实例3:python
  8. mysql rename语法错误_为什么现在MySQL无法重命名数据库?
  9. 必背单词_初中英语:2000个必背单词(附音标)汇总,打印背完,3年考高分
  10. 利用bloom filter算法处理大规模数据过滤
  11. 将json字符串转换成html,根据json字符串生成Html的一种方式
  12. 3.微信小程序--快速开发UI界面
  13. 算法时间复杂度符号分析(O、o、Ω、ω、Θ)
  14. 算法笔记 —— 汉诺塔详解
  15. 【女装2018新款潮碎花半身裙韩版气质两件套裙子】http://m.tb.cn/h.3aHr1L7
  16. Jenkins系列之——第四章 Jenkins编译一个Web项目并远程发布到Tomcat
  17. Vue生命周期beforeUpdate()和updated()
  18. c语言入门篇:注释定界符详解
  19. 从概念到现状,一文读懂边缘计算
  20. 山建大计算机学院,山建大丨历数20年来建大学生作业设计表达的前世今生

热门文章

  1. 装tensorflow未果
  2. 2021_0207_生活记录
  3. 最新python中一升级所有已安装的包方法
  4. 【HDU 5869】Different GCD Subarray Query【区间不同 gcd 个数】
  5. gamma 函数的 LaTeX 代码
  6. 使用python爬取网站源代码
  7. matlab图像的邻域操作,matlab图像的邻域操作与块操作 | 学步园
  8. 获取URL参数JS函数
  9. Oracle建立连接的过程分析
  10. web开发:css基础