- 浏览: 1096094 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
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 1102https://developer.android.com ... -
图片的水平平铺效果
2014-03-10 15:45 2410Android要实现图片的水平平铺效果: 很简单也很强大, ... -
LinearLayout中的属性baselineAligned的使用
2013-10-19 18:54 34383Android线性布局中的属性主要的就是控制浮动方向的or ... -
Activity伪造Dialog的时候不能全屏显示
2013-05-31 08:42 14204使用Activity伪造Dialog的时候出现不能全屏的问 ... -
修改局部源码烧录手顺
2012-08-16 09:23 20971. 添加命令到PATH路径下,方便全局使用: andro ... -
备份我的源码烧录的sh文件
2012-07-16 10:39 1339烧录编译的img文件: 01.tofastboot.sh ... -
备份我的源码编译的sh文件
2012-07-16 10:34 1553编译命令写一次就可以了。以后直接使用。 01-extra_s ... -
ADT20安装报错
2012-06-29 23:44 9159Cannot complete the install bec ... -
ubuntu12.04(VirtualBox) 64-bit build android source
2012-05-20 17:33 29871.download VirtalBox(Virtual ... -
搭建android源码编译开发服务器
2012-05-20 17:32 72981.android服务器,其实也就是台式机器的增强版本。基本上 ... -
ADT离线安装报错
2012-04-23 09:37 3349最近使用ADT的离线zip包安装ADT总是报错。说是 Can ... -
Android源码编译中的Makefile文件
2012-04-18 09:09 24651.和大多shell文件一样,makefile中的#表示注释, ... -
遍历android根目录的简单资源查看器
2012-04-16 17:02 3702效果如图: package com.txl.sua; ... -
Nexus s与android4.0
2011-12-14 13:15 13881.内核源码链接 http://android.git.ke ... -
Android编译生成系统-译文
2011-12-08 11:21 3459生成 4.0.1 系统 下边 ... -
Android中设置TextView的颜色setTextColor
2011-11-10 11:34 182288android中设置TextView的颜色有方法setTex ... -
Android中设置activity的background为Wallpaper
2011-08-15 08:34 3862<activity android:name=&q ... -
android程序中怎么实现平铺效果
2011-08-10 17:06 4897很简单,就像window桌面图片一样,如果图片小的话就会平铺。 ... -
一个android应用向Home screen添加多个Widget
2011-08-09 15:12 5137如Twitter客户端或者HTC的日历应用,可以添加大小不 ... -
怎么实现Widget中的动画效果,如渐入等
2011-08-09 11:22 3036怎么在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
package ljh.opengl;是对OpenglES的一些封装。 package ljh.game;是对一些游戏常用的代码的封装 都没写完! 最近改学IOS了 看看什么时候能补充完。
Android 3D游戏开发技术宝典 OpenGL ES2.0学习。
Android OpenGL ES 简明开发教程
Android OpenGl ES用点绘制的方式绘制圆点,并对圆点进行抗锯齿优化。
Android OpenGL ES (二) 绘制三维/空间坐标系 透明的立体图加三维向量和xyz坐标轴 源代码包,直接倒入eclips修改packadge便可用
该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106
android opengles 贴图旋转3D立方体,源码和apk
android opengl es 粒子,火焰,android opengl es 粒子,火焰
android OpenGL ES 中文 API
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
android opengles2.0水波纹效果,
Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,...
Android平台采集Camera的YUV原始数据后使用OpenGLES2.0显示,内置YV12格式的YUV分量分离。 附件为完整例子,感谢“李狗蛋52635”提供的GLProgram类。
Android openGL ES 画球
android openGL 里面提供了illegalArgumentException异常的解决方法
Android平台,OpenGL ES3.0 点、线、三角形绘制方式源码实现举例。 相关绘制方式文章讲解请参考: https://xiaxl.blog.csdn.net/article/details/8873002
android openGL ES 2.0画等边三角形,正方形
在Android平台,使用OpenGLES3.0实现纹理纹理、颜色混合代码实现举例。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/121634894