- 浏览: 1099934 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
baiyi168:
非常有用,多谢楼主
Android中的一个TextView中的字体设置不同大小 -
qq271629261:
[img] ...
android开发工具 Eclipse+Android SDK+ADT -
txlong_onz:
haotainan 写道Activity伪造Dialog,这个 ...
Activity伪造Dialog的时候不能全屏显示 -
haotainan:
Activity伪造Dialog,这个Dialog显示的时候界 ...
Activity伪造Dialog的时候不能全屏显示 -
gangbener:
cainingyouyou 写道7楼的,tag,怎么解决的啊1 ...
android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
Android用的是OpenGL图形函数库,它可以跨平台。
OpenGL的定义:OpenGL(Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。
Android所用到的是它的一个子集OpenGL ES(OpenGL for Embedded Systems(嵌入式系统))就是OpenGL的嵌入式版本。
1.主activity
package com.jftt.opengl; import android.app.Activity; import android.os.Bundle; public class OpenGL extends Activity { private static final String TAG = OpenGL.class.getSimpleName(); private VortexView vortexView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); vortexView = new VortexView(this); setContentView(vortexView); } @Override protected void onPause() { super.onPause(); vortexView.onPause(); } @Override protected void onResume() { super.onResume(); vortexView.onResume(); } }
2.继承GLSurfaceView类的自己的View
package com.jftt.opengl; import android.content.Context; import android.opengl.GLSurfaceView; import android.view.MotionEvent; public class VortexView extends GLSurfaceView { private static final String LOG_TAG = VortexView.class.getSimpleName(); private VortexRenderer renderer; public VortexView(Context context) { super(context); renderer = new VortexRenderer(); setRenderer(renderer); } @Override public boolean onTouchEvent(final MotionEvent event) { queueEvent(new Runnable() { @Override public void run() { renderer.setColor(event.getX() / getWidth(), event.getY() / getHeight(), 1.0f); renderer.setAngle(event.getX() / 10); } }); return super.onTouchEvent(event); } }
3.实现渲染器renderer类
package com.jftt.opengl; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.ShortBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView; public class VortexRenderer implements GLSurfaceView.Renderer { private static final String TAG = VortexRenderer.class.getSimpleName(); private float red = 0f; private float green = 0f; private float blue = 0f; private ShortBuffer indexBuffer; private FloatBuffer vertexBuffer; private short[] indicesArray = { 0, 1, 2 }; private int numberOfVertices = 3; private float angle; private void initTriangle() { ByteBuffer vbb = ByteBuffer.allocateDirect(numberOfVertices * 3 * 4); vbb.order(ByteOrder.nativeOrder()); vertexBuffer = vbb.asFloatBuffer(); ByteBuffer ibb = ByteBuffer.allocateDirect(numberOfVertices * 2); ibb.order(ByteOrder.nativeOrder()); indexBuffer = ibb.asShortBuffer(); float[] coords = { -0.5f, -0.5f, 0f, 0.5f, -0.5f, 0f, 0f, 0.5f, 0f }; vertexBuffer.put(coords); indexBuffer.put(indicesArray); vertexBuffer.position(0); indexBuffer.position(0); } public void setColor(float red, float green, float blue) { this.red = red; this.green = green; this.blue = blue; } public void setAngle(float angle){ this.angle = angle; } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); initTriangle(); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); } @Override public void onDrawFrame(GL10 gl) { gl.glClearColor(red, green, blue, 1.0f); gl.glClear(GL10.GL_COLOR_BUFFER_BIT); gl.glRotatef(angle, 0f, 1f, 0f); gl.glColor4f(0.5f, 0f, 0f, 0.5f); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); gl.glDrawElements(GL10.GL_TRIANGLES, numberOfVertices, GL10.GL_UNSIGNED_SHORT, indexBuffer); } }
4.封装的三角形的类
package com.jftt.opengl; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.ShortBuffer; import java.util.Random; public class Triangle { private short[] myIndecesArray = { 0, 1, 2 }; private int numberOfVertices = 3; private float red = 0f; private float green = 0f; private float blue = 0f; // a raw buffer to hold indices allowing a reuse of points. private ShortBuffer indexBuffer; // a raw buffer to hold the vertices private FloatBuffer vertexBuffer; private Random random = new Random(); public Triangle() { red = random.nextFloat(); red = red - (float) Math.floor(red); green = random.nextFloat(); green = green - (float) Math.floor(green); blue = random.nextFloat(); blue = blue - (float) Math.floor(blue); ByteBuffer vbb = ByteBuffer.allocateDirect(numberOfVertices * 3 * 4); vbb.order(ByteOrder.nativeOrder()); vertexBuffer = vbb.asFloatBuffer(); ByteBuffer ibb = ByteBuffer.allocateDirect(numberOfVertices * 2); ibb.order(ByteOrder.nativeOrder()); indexBuffer = ibb.asShortBuffer(); float[] coords = { randomValue(red), randomValue(red), randomValue(red), randomValue(green), randomValue(green), randomValue(green), randomValue(blue), randomValue(blue), randomValue(blue) }; for (int i = 0; i < numberOfVertices; i++) { for (int j = 0; j < 3; j++) { vertexBuffer.put(coords[i * 3 + j]); } } for (int i = 0; i < 3; i++) { indexBuffer.put(myIndecesArray[i]); } vertexBuffer.position(0); indexBuffer.position(0); } private float randomValue(float value) { int tmp = random.nextInt(2); if (tmp == 0) { tmp = -1; } return value * tmp; } public FloatBuffer getVertexBuffer() { return vertexBuffer; } public ShortBuffer getIndexBuffer() { return indexBuffer; } public int getNumberOfVertices() { return numberOfVertices; } public float getGreen() { return green; } public float getRed() { return red; } public float getBlue() { return blue; } }
- OpenGL.rar (31.5 KB)
- 下载次数: 286
发表评论
-
安卓自动编译工具Gradle
2015-09-02 15:15 1129https://developer.android.com ... -
图片的水平平铺效果
2014-03-10 15:45 2444Android要实现图片的水平平铺效果: 很简单也很强大, ... -
LinearLayout中的属性baselineAligned的使用
2013-10-19 18:54 34415Android线性布局中的属性主要的就是控制浮动方向的or ... -
Activity伪造Dialog的时候不能全屏显示
2013-05-31 08:42 14266使用Activity伪造Dialog的时候出现不能全屏的问 ... -
修改局部源码烧录手顺
2012-08-16 09:23 21391. 添加命令到PATH路径下,方便全局使用: andro ... -
备份我的源码烧录的sh文件
2012-07-16 10:39 1380烧录编译的img文件: 01.tofastboot.sh ... -
备份我的源码编译的sh文件
2012-07-16 10:34 1603编译命令写一次就可以了。以后直接使用。 01-extra_s ... -
ADT20安装报错
2012-06-29 23:44 9232Cannot complete the install bec ... -
ubuntu12.04(VirtualBox) 64-bit build android source
2012-05-20 17:33 30431.download VirtalBox(Virtual ... -
搭建android源码编译开发服务器
2012-05-20 17:32 73511.android服务器,其实也就是台式机器的增强版本。基本上 ... -
ADT离线安装报错
2012-04-23 09:37 3398最近使用ADT的离线zip包安装ADT总是报错。说是 Can ... -
Android源码编译中的Makefile文件
2012-04-18 09:09 25571.和大多shell文件一样,makefile中的#表示注释, ... -
遍历android根目录的简单资源查看器
2012-04-16 17:02 3771效果如图: package com.txl.sua; ... -
Nexus s与android4.0
2011-12-14 13:15 14411.内核源码链接 http://android.git.ke ... -
Android编译生成系统-译文
2011-12-08 11:21 3536生成 4.0.1 系统 下边 ... -
Android中设置TextView的颜色setTextColor
2011-11-10 11:34 182369android中设置TextView的颜色有方法setTex ... -
Android中设置activity的background为Wallpaper
2011-08-15 08:34 3905<activity android:name=&q ... -
android程序中怎么实现平铺效果
2011-08-10 17:06 4932很简单,就像window桌面图片一样,如果图片小的话就会平铺。 ... -
一个android应用向Home screen添加多个Widget
2011-08-09 15:12 5137如Twitter客户端或者HTC的日历应用,可以添加大小不 ... -
怎么实现Widget中的动画效果,如渐入等
2011-08-09 11:22 3106怎么在Widget中添加animation,如渐入渐出,淡入淡 ...
相关推荐
含有以下4个pdf,主要介绍基本概念和用法,对初学者非常有用。...Android OpenGL ES 简明开发教程.pdf Android_OpenGL_ES_book.pdf OpenGL ES 2 for Android.pdf Apress.Pro.OpenGL.ES.for.Android.Feb.2012.pdf
最后,了解如何与硬件加速的OpenGLES API交互,以及熟悉GLSL语言(OpenGL Shading Language),是成为OpenGL ES 2.0专家的必经之路。通过编写高效、可读性强的着色器代码,可以创造出各种复杂的视觉效果,实现令人...
package ljh.opengl;是对OpenglES的一些封装。 package ljh.game;是对一些游戏常用的代码的封装 都没写完! 最近改学IOS了 看看什么时候能补充完。
### Android OpenGL ES 开发教程详解 #### 概述与历史沿革 OpenGL ES(OpenGL for Embedded Systems)作为OpenGL API的子集,专为移动设备、PDA和游戏主机等嵌入式系统设计,旨在简化3D图形应用的开发流程。自2003...
在Android平台上,OpenGL ES是一种广泛使用的图形库,用于在移动设备上实现高性能的2D和3D图形渲染。本文将深入探讨如何使用OpenGL ES来绘制圆点,并介绍一种方法来优化圆点边缘的锯齿问题,提升视觉效果。 首先,...
本教程主要探讨如何在Android系统上,利用OpenGLES2.0图形库来处理和显示从Camera获取的YUV原始数据。YUV是一种常见的颜色空间,广泛应用于视频编码和解码,因为它对带宽的要求相对较低,特别适合移动设备。 首先,...
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建高性能的2D和3D图形。在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程...
该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建复杂的3D图形和动画。Android OpenGL ES 提供了一个接口,让开发者能够利用硬件加速的图形处理能力,来绘制出立方体、球体、...
OpenGL ES在Android平台上的应用是实现3D图形渲染的关键技术,而Obj文件格式是一种常见的3D模型数据交换格式。在Android开发中,如果想要将Obj格式的3D模型导入到应用中,就需要对OpenGL ES有深入的理解,并且掌握...
在Android平台上,JNI(Java Native Interface)允许开发者使用C++代码来增强应用程序的功能,尤其是在处理图形和计算密集型任务时,如使用OpenGL ES和OpenCV。这个特定的项目旨在通过JNI调用来结合这两个强大的库...
Android openGL ES 画球
android openGL 里面提供了illegalArgumentException异常的解决方法
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android平台上,它用于创建复杂的2D和3D图形效果。OpenGL ES(Embedded Systems)是OpenGL的轻量级版本,专为资源有限的移动设备设计。在Android系统中,...
android openGL ES 2.0画等边三角形,正方形
Android平台,OpenGL ES3.0 点、线、三角形绘制方式源码实现举例。 相关绘制方式文章讲解请参考: https://xiaxl.blog.csdn.net/article/details/8873002
OpenGL ES (Embedded Systems) 是一个轻量...通过这个教程,开发者可以逐步学习如何在Android应用中设置和使用OpenGL ES,创建复杂的3D图形和动画,同时理解如何有效地利用`GLSurfaceView`提供的特性来优化性能和调试。
`GL10`接口是`javax.microedition.khronos.opengles`包中的一个核心接口,它继承自`GL`接口,并且是`GL11`接口的父接口。`GL10`接口封装了OpenGL ES的基本功能,包括核心渲染命令和其他一些重要的扩展特性。此接口...