Android OpenGL ES(十)绘制三角形Triangle .
三角形为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 .相关推荐
- android opengl把经纬度点用红色点显示在3d地球上,android OpenGL ES 地球仪绘制——球体绘制及纹理映射——源码...
[实例简介] 支持如下: (1)opengl es绘制三角形拼成球体 (2)图片作为纹理映射到整个球面上 (3)双点触控缩放球体 (4)拖动旋转球体 [实例截图] [核心代码] OpenGLESTut ...
- 【OpenGL ES】绘制圆形
1 前言 [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,[OpenGL ES]绘制正方形中介绍了绘制正方形的方法,本文将介绍绘制圆形的方法. OpenGL 以点.线段.三角形为图元,没有 ...
- 【OpenGL ES】绘制正方形
1 前言 [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,本文将介绍绘制正方形的方法. OpenGL 以点.线段.三角形为图元,没有提供绘制正方形内部的接口.要绘制正方形内部,必须通过三角 ...
- Android OpenGL ES 学习(十) – GLSurfaceView 源码解析GL线程以及自定义 EGL
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- OpenGl文章
Android OpenGL ES 简明开发教程
Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...
- OpenGL ES之三——绘制纯色背景
概述 这是一个系列的Android平台下OpenGl ES介绍,从最基本的使用最终到VR图的展示的实现,属于基础篇.(后面针对VR视频会再有几篇文章,属于进阶篇) OpenGL ES之一--概念扫盲 ...
- 使用Android OpenGL ES 2.0绘图之五:添加运动
传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/levera ...
- Android OpenGL ES视频渲染(一)GLSurfaceView
相关文章:Android OpenGL ES视频渲染(二)EGL+OpenGL Android中视频渲染有几种方式,之前的文章使用的是nativewindow(包括softwareRender).今天 ...
- Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
最新文章
- therefore/so/hence/then/accordingly/Thus
- 删除IBASE component时遇到data_not_consistent的exception
- android 动态设置priority,Android属性之android:priority
- pytorch深度学习入门_立即学习AI:01 — Pytorch入门
- win10更新过后导致某些字体被损坏
- java自然语言处理_Java自然语言处理NLP工具包
- 数字滤波器原理及应用 借助matlab,数字滤波器原理及应用(借助MATLAB)
- Interpreting visually-grounded navigation instructions in real environments论文翻译
- 随心而行----我与计算机的缘分
- SOT23(Small Outline Transistor)
- 【迟到的Java岗面经】面7家,意外收获5家意向offer,越努力越幸运!
- css 长单词不换行溢出容器的解决方法 word-wrap与word-break
- [UE5蓝图基础一]13.类似”人类一败涂地”掉落一定距离会回到空中 最终着落点还是设定地形上
- 在Android手机或平板电脑上启用开发者模式选项
- 整理《我三年开发经验,从字节跳动抖音组离职后,一口气拿到15家公司Offer》
- 2020秋季甲级PAT 7-4 Professional Ability Test (30 分)
- 数据结构与算法--散列表
- 第三方接口该如何调用
- 基于C++的UKF代码示例,跟踪三次多项式曲线
- PEPC丨磷酸烯醇丙酮酸羧化酶功能研究