三角形为OpenGL ES支持的面,同样创建一个DrawTriangle Activity,定义6个顶点使用三种不同模式来绘制三角形:

float vertexArray[] = {-0.8f, -0.4f * 1.732f, 0.0f,0.0f, -0.4f * 1.732f, 0.0f,-0.4f, 0.4f * 1.732f, 0.0f,0.0f, -0.0f * 1.732f, 0.0f,0.8f, -0.0f * 1.732f, 0.0f,0.4f, 0.4f * 1.732f, 0.0f,
};

本例绘制

public void DrawScene(GL10 gl) {super.DrawScene(gl);ByteBuffer vbb= ByteBuffer.allocateDirect(vertexArray.length*4);vbb.order(ByteOrder.nativeOrder());FloatBuffer vertex = vbb.asFloatBuffer();vertex.put(vertexArray);vertex.position(0);gl.glLoadIdentity();gl.glTranslatef(0, 0, -4);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex);index++;index%=10;switch(index){case 0:case 1:case 2:gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 6);break;case 3:case 4:case 5:gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 6);break;case 6:case 7:case 8:case 9:gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 6);break;}gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}

这里index 的目的是为了延迟一下显示(更好的做法是使用固定时间间隔)。前面说过GLSurfaceView 的渲染模式有两种,一种是连续不断的更新屏幕,另一种为on-demand ,只有在调用requestRender() 在更新屏幕。 缺省为RENDERMODE_CONTINUOUSLY 持续刷新屏幕。

OpenGLDemos 使用的是缺省的RENDERMODE_CONTINUOUSLY持续刷新屏幕 ,因此Activity的drawScene 会不断的执行。本例中屏幕上顺序以红,绿,蓝色显示TRIANGLES, TRIANGLE_STRIP,TRIANGLE_FAN。

完整代码:

MainActivity.java

package com.example.gltest;import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;public class MainActivity extends Activityimplements IOpenGLDemo{float vertexArray[] = {-0.8f, -0.4f * 1.732f, 0.0f,-0.4f, 0.4f * 1.732f, 0.0f,0.0f, -0.4f * 1.732f, 0.0f,0.4f, 0.4f * 1.732f, 0.0f,};/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);mGLSurfaceView = new GLSurfaceView(this);mGLSurfaceView.setRenderer(new OpenGLRenderer(this));setContentView(mGLSurfaceView);}//        public void DrawScene(GL10 gl) {
//            gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
//            // Clears the screen and depth buffer.
//            gl.glClear(GL10.GL_COLOR_BUFFER_BIT
//              | GL10.GL_DEPTH_BUFFER_BIT);
//
//        }public void DrawScene(GL10 gl) {//super.DrawScene(gl);
             ByteBuffer vbb= ByteBuffer.allocateDirect(vertexArray.length*4);vbb.order(ByteOrder.nativeOrder());FloatBuffer vertex = vbb.asFloatBuffer();vertex.put(vertexArray);vertex.position(0);gl.glLoadIdentity();gl.glTranslatef(0, 0, -4);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex);int index = 0;index ++;index%=10;switch(index){case 0:case 1:case 2:gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 6);break;case 3:case 4:case 5:gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 6);break;case 6:case 7:case 8:case 9:gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f);gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 6);break;}gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}@Overrideprotected void onResume() {// Ideally a game should implement// onResume() and onPause()// to take appropriate action when the//activity looses focus
            super.onResume();mGLSurfaceView.onResume();}@Overrideprotected void onPause() {// Ideally a game should implement onResume()//and onPause()// to take appropriate action when the//activity looses focus
            super.onPause();mGLSurfaceView.onPause();}private GLSurfaceView mGLSurfaceView;}

后面的 OpenGLRenderer.java和  IOpenGLDemo.java一样。

Android OpenGL ES(十)绘制三角形Triangle .相关推荐

  1. android opengl把经纬度点用红色点显示在3d地球上,android OpenGL ES 地球仪绘制——球体绘制及纹理映射——源码...

    [实例简介] 支持如下: (1)opengl es绘制三角形拼成球体 (2)图片作为纹理映射到整个球面上 (3)双点触控缩放球体 (4)拖动旋转球体 [实例截图] [核心代码] OpenGLESTut ...

  2. 【OpenGL ES】绘制圆形

    1 前言 [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,[OpenGL ES]绘制正方形中介绍了绘制正方形的方法,本文将介绍绘制圆形的方法. OpenGL 以点.线段.三角形为图元,没有 ...

  3. 【OpenGL ES】绘制正方形

    1 前言 [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,本文将介绍绘制正方形的方法. OpenGL 以点.线段.三角形为图元,没有提供绘制正方形内部的接口.要绘制正方形内部,必须通过三角 ...

  4. Android OpenGL ES 学习(十) – GLSurfaceView 源码解析GL线程以及自定义 EGL

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  5. Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  6. OpenGl文章 Android OpenGL ES 简明开发教程

    Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...

  7. OpenGL ES之三——绘制纯色背景

    概述 这是一个系列的Android平台下OpenGl ES介绍,从最基本的使用最终到VR图的展示的实现,属于基础篇.(后面针对VR视频会再有几篇文章,属于进阶篇) OpenGL ES之一--概念扫盲 ...

  8. 使用Android OpenGL ES 2.0绘图之五:添加运动

    传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/levera ...

  9. Android OpenGL ES视频渲染(一)GLSurfaceView

    相关文章:Android OpenGL ES视频渲染(二)EGL+OpenGL Android中视频渲染有几种方式,之前的文章使用的是nativewindow(包括softwareRender).今天 ...

  10. Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

最新文章

  1. therefore/so/hence/then/accordingly/Thus
  2. 删除IBASE component时遇到data_not_consistent的exception
  3. android 动态设置priority,Android属性之android:priority
  4. pytorch深度学习入门_立即学习AI:01 — Pytorch入门
  5. win10更新过后导致某些字体被损坏
  6. java自然语言处理_Java自然语言处理NLP工具包
  7. 数字滤波器原理及应用 借助matlab,数字滤波器原理及应用(借助MATLAB)
  8. Interpreting visually-grounded navigation instructions in real environments论文翻译
  9. 随心而行----我与计算机的缘分
  10. SOT23(Small Outline Transistor)
  11. 【迟到的Java岗面经】面7家,意外收获5家意向offer,越努力越幸运!
  12. css 长单词不换行溢出容器的解决方法 word-wrap与word-break
  13. [UE5蓝图基础一]13.类似”人类一败涂地”掉落一定距离会回到空中 最终着落点还是设定地形上
  14. 在Android手机或平板电脑上启用开发者模式选项
  15. 整理《我三年开发经验,从字节跳动抖音组离职后,一口气拿到15家公司Offer》
  16. 2020秋季甲级PAT 7-4 Professional Ability Test (30 分)
  17. 数据结构与算法--散列表
  18. 第三方接口该如何调用
  19. 基于C++的UKF代码示例,跟踪三次多项式曲线
  20. PEPC丨磷酸烯醇丙酮酸羧化酶功能研究

热门文章

  1. Oracle 根据一张发票的供应商,取供应商所有符合条件的发票的总额
  2. RHEL5 RHEL6 差异 1
  3. 国内首本免费深度学习书籍!还有人没Get么?
  4. java中do loop的使用_Java中do-while循环——通过示例学编程(11)
  5. MySQL分组查询—添加筛选的总结
  6. MySQL 高级 - 触发器 - 介绍
  7. Nacos配置管理-微服务配置拉取
  8. Docker Client(Docker 客户端)
  9. 在Spring 框架中如何更有效的使用JDBC?
  10. 将session维护在客户端