1.创建render类

*** 绘制三角形* Created by hxk on 2018/10/10.*/public class TriangleRenderer implements GLSurfaceView.Renderer {private final Context context;private final FloatBuffer vertexData;private static final int POSITION_COMPONENT_COUNT = 2;private static final int BYTES_PER_FLOAT = 4;private int program;//存储链接程序的IDprivate static final String U_COLOR = "u_Color";private int uColorLocation;private static final String A_POSITION = "a_Position";private int aPositionLocation;public TriangleRenderer(Context context) {this.context = context;float[] triangleVertices = {0f, 0.5f,-0.5f, 0f,0.5f, 0};vertexData = ByteBuffer.allocateDirect(triangleVertices.length * BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();vertexData.put(triangleVertices);//本地内存缓冲区}@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {//清屏  RGBAglClearColor(0.0f, 0.0f, 0.0f, 0.0f);String vertexShaderSource = TextResourceReader.readTextFileFromResource(context, R.raw.simple_vertex_shader);String fragmentShaderSource = TextResourceReader.readTextFileFromResource(context, R.raw.simple_fragment_shader);int vertexShader = ShaderHelper.compileVertexShader(vertexShaderSource);int fragmentShader = ShaderHelper.compileFragmentShader(fragmentShaderSource);//链接着色器program = ShaderHelper.linkProgram(vertexShader, fragmentShader);//验证程序对于opengl是否有效  debugShaderHelper.validateProgram(program);//告诉opengl绘制任何东西到屏幕上需要使用这里定义的程序glUseProgram(program);//获取uniform的位置,把位置存入uColorLocation中uColorLocation = glGetUniformLocation(program, U_COLOR);//获取属性位置aPositionLocation = glGetAttribLocation(program, A_POSITION);//关联属性与顶点数据数组的数组//vertextData是我们在本地内存中创建的一个缓冲区,存的是位置//确保缓冲区从头开始读数据,置0vertexData.position(0);//告诉opengl从缓冲区vertextData中取数据找到属性a_Position的数据glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT, GL_FLOAT, false, 0, vertexData);//使能顶点数组glEnableVertexAttribArray(aPositionLocation);}@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {}@Overridepublic void onDrawFrame(GL10 gl) {glClear(GL_COLOR_BUFFER_BIT);//绘制桌子glUniform4f(uColorLocation, 1.0f, 1.0f, 1.0f, 1.0f);//画个三角形,每个三角形有三个顶点,2个三角形6个顶点glDrawArrays(GL_TRIANGLES, 0, 3);}
}

2.创建activity

public class TriangleActivity extends AppCompatActivity {private GLSurfaceView glSurfaceView;private boolean rendererSet = false;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);glSurfaceView = new GLSurfaceView(this);// Check if the system supports OpenGL ES 2.0.ActivityManager activityManager =(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();// Even though the latest emulator supports OpenGL ES 2.0,// it has a bug where it doesn't set the reqGlEsVersion so// the above check doesn't work. The below will detect if the// app is running on an emulator, and assume that it supports// OpenGL ES 2.0.final boolean supportsEs2 =configurationInfo.reqGlEsVersion >= 0x20000|| (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1&& (Build.FINGERPRINT.startsWith("generic")|| Build.FINGERPRINT.startsWith("unknown")|| Build.MODEL.contains("google_sdk")|| Build.MODEL.contains("Emulator")|| Build.MODEL.contains("Android SDK built for x86")));if (supportsEs2) {// Request an OpenGL ES 2.0 compatible context.glSurfaceView.setEGLContextClientVersion(2);// Assign our renderer.glSurfaceView.setRenderer(new TriangleRenderer(this));rendererSet = true;} else {/** This is where you could create an OpenGL ES 1.x compatible* renderer if you wanted to support both ES 1 and ES 2. Since* we're not doing anything, the app will crash if the device* doesn't support OpenGL ES 2.0. If we publish on the market, we* should also add the following to AndroidManifest.xml:** <uses-feature android:glEsVersion="0x00020000"* android:required="true" />** This hides our app from those devices which don't support OpenGL* ES 2.0.*/Toast.makeText(this, "This device does not support OpenGL ES 2.0.",Toast.LENGTH_LONG).show();return;}setContentView(glSurfaceView);}@Overrideprotected void onPause() {super.onPause();if (rendererSet) {glSurfaceView.onPause();}}@Overrideprotected void onResume() {super.onResume();if (rendererSet) {glSurfaceView.onResume();}}
}

3.显示效果

opengles系列-绘制三角形相关推荐

  1. viewpager初始化fragment没有绘制_NDK OpenGL ES渲染系列 之 绘制三角形

    前言 新的知识学习都是循序渐进的,从基础到复杂.前面OpenGL ES概念 已经介绍了OpenGL ES的相关概念,这篇文章开始我们就正式开始OpenGL ES渲染系列第一站---绘制三角形.绘制三角 ...

  2. OpenGL ES基础教程,绘制三角形(补充,附代码)

    简介 OpenGL OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言.跨平台的编程接口规格的专业的图形程序接口.它用于三维图像(二维亦可),是一个功能强大,调用方 ...

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

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

  4. OPenGL 学习笔记之 VAO VBO EBO 以及SHADER 并使用其绘制三角形

    译注 在学习此节之前,建议将这三个单词先记下来: 顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Eleme ...

  5. 音视频之opengl绘制三角形

    音视频之opengl绘制三角形 音视频之opengl渲染图片 音视频之渲染yuv图片 2018年用了一年业余时间学习了音视频,直播,解码,编码,倍速,跳转,滤镜,倒放等.,慢慢把这部分内容写到博客上, ...

  6. Qt下使用Shader绘制三角形

    在Qt下使用可编程管线编写OpenGL的流程是怎样的呢? 下面演示了Qt下使用可编程管线的基本代码:(绘制三个不同的三角形,并做些旋转变换) 在Qt中,我们从QGLWidget继承,来实现OpenGL ...

  7. css画横线箭头_用CSS绘制三角形箭头

    用CSS绘制三角形箭头.使用纯CSS,你只需要很少的代码就可以创作出各种浏览器都兼容的三角形箭头! CSS代码:/* create an arrow that points up */ div.arr ...

  8. 【OpenGL】十五、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_FAN 三角形扇 )

    文章目录 一.绘制 GL_TRIANGLE_FAN 三角形 1.绘制 3 个点的情况 2.绘制 4 个点的情况 3.绘制 5 个点的情况 4.绘制 6 个点的情况 二.相关资源 一.绘制 GL_TRI ...

  9. 【OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )

    文章目录 一.绘制 GL_TRIANGLE_STRIP 三角形 二.GL_TRIANGLE_STRIP 三角形绘制分析 三.相关资源 一.绘制 GL_TRIANGLE_STRIP 三角形 该模式绘制首 ...

最新文章

  1. 参加软件测试培训需要注意哪些
  2. 微信小程序学习笔记(4)--------框架之逻辑层
  3. NLP-基础知识-007(机器学习-朴素贝叶斯)
  4. 一起玩树莓派3+使用Gitlab搭建专业Git服务
  5. 一个SCSS里mixin的使用例子
  6. linux中hadoop命令大全,hadoop常用命令
  7. 求交错序列前N项和(15 分)
  8. PHP MYSQL关键词统计系统_PHP MySQL Order By 关键词
  9. Asp.Net MVC4入门指南(8):给数据模型添加校验器
  10. 新手练字又快又好的方法
  11. Win10磁盘管理教程:新建、合并分区,添加和修改盘符
  12. qq服务器上的文件删除后如何恢复,QQ文件失效怎么恢复(过期的QQ文件如何申请恢复)...
  13. 凯恩斯主义两个重要观念的由来
  14. Android系统WebView无法安装,Android系统进程无法加载WebView
  15. 在硬盘上快速安装多个操作系统
  16. UVa 10813 - Traditional BINGO
  17. OnePlus 7T LineageOS 编译向导
  18. numpy获得前n大元素下标
  19. ios 提醒事项和快捷指令,实现进度条功能
  20. pytorch矩阵运算

热门文章

  1. eclipse中常见快捷键
  2. HDU2017 字符串统计【入门】
  3. HDU2001 计算两点间的距离【入门】
  4. CCF201409-1 相邻数对(100分)【序列处理】
  5. POJ3250 Bad Hair Day【单调递减队列+堆栈】
  6. POJ NOI0107-06 合法 C 标识符【文本处理】
  7. CCF NOI1073 放苹果
  8. 物品的名字、品牌的认识
  9. 用几何(解析几何)方法求解概率问题
  10. leetcode —— 数组(1. Two Sum)