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. Exp4 恶意代码分析 20164303 景圣
  2. pytorch 打印模型参数
  3. 树莓派:linux库概念及相关编程(面试重点):以及USB端口号找到不的情况
  4. vue组件系列2、拖放上传
  5. 阿里SRE体系如何支撑24小时峰值压力、220+个国家“剁手党”?
  6. DevOps vs. Agile:它们有什么共同点?
  7. ts 模板库文件_vue与ts的使用模版
  8. Python:运行时隐藏窗口
  9. IT运维的365天--007PC端微信图片不能正常接收发送
  10. POJ 3368 Frequent values
  11. 什么是云服务器?如何选择?
  12. 网易云---手机验证码登录
  13. Java面向对象设计(面向对象)
  14. Java读取、写入、处理Excel文件中的数据
  15. 读书笔记 PCG in Games 程序化内容生成3 构造性方法,针对地牢式关卡
  16. smartgwt (B)
  17. DTS中video-interfaces接口详解
  18. Mobile-Former来了!微软提出:MobileNet+Transformer轻量化并行网络
  19. STM32L4R9ZIY6PTR STM32L4高性能嵌入式—MCU
  20. 判断OOBE 完成状态

热门文章

  1. java中各种运算符
  2. Google拒绝因搜索不良信息被传唤
  3. HDU1598 find the most comfortable road【枚举+并查集+最大生成树】
  4. Bailian4106 出现两次的字符-Characters Appearing twice【计数统计】
  5. 51Nod-1013 3的幂的和【快速模幂+逆元】
  6. scala 基础类库 —— 文件操作
  7. 机器学习基础(二十五)—— Feature Selection
  8. 语句乎?表达式乎?(Python/C)
  9. 隐藏网络计算机,如何在网络中隐藏自己的计算机名称
  10. python3 asyncio 不阻塞_Python3 asyncio异步框架,让我崩溃的点