01.Activity类:
02.
03.package sim.feel;
02.
03.import android.app.Activity; 04.import android.content.res.Resources; 05.import android.graphics.Bitmap; 06.import android.graphics.BitmapFactory; 07.import android.opengl.GLSurfaceView; 08.import android.os.Bundle; 09.
10.public class Star extends Activity { 11. private GLSurfaceView glSurfaceView; 12. private MyRenderer renderer; 13.
14. @Override 15. public void onCreate(Bundle savedInstanceState) { 16. super.onCreate(savedInstanceState); 17. Load.loadBitmap(getResources());
18. renderer = new MyRenderer(); 19. glSurfaceView = new GLSurfaceView(this); 20. glSurfaceView.setRenderer(renderer);
21. setContentView(glSurfaceView);
22. }
23.}
24.
25.class Load { 26. public static Bitmap bitmap; 27.
28. public static void loadBitmap(Resources res) { 29. bitmap = BitmapFactory.decodeResource(res, R.drawable.star);
30. }
31.}
32.
33.Renderer类:
34.
35.package sim.feel; 36.
37.import java.nio.ByteBuffer; 38.import java.nio.ByteOrder; 39.import java.nio.IntBuffer; 40.import java.util.Random; 41.
42.import javax.microedition.khronos.egl.EGLConfig; 43.import javax.microedition.khronos.opengles.GL10; 44.
45.import android.opengl.GLSurfaceView.Renderer; 46.import android.opengl.GLUtils; 47.
48.public class MyRenderer implements Renderer { 49. private int one = 0x10000; 50. private IntBuffer vertexBuffer; 51. private int[] vertex = new int[] { -one, -one, 0, one, -one, 0, -one, one, 52. 0, one, one, 0 }; 53. private IntBuffer coordBuffer; 54. private int[] coord = { 0, 0, one, 0, 0, one, one, one }; 55. private int[] textures = new int[1]; 56. private Random random = new Random(); 57. // 闪烁的星星 58. boolean twinkle = true; 59. // star数目 60. int num = 50; 61. // star数目数组 62. NiceStar[] star = new NiceStar[num]; 63. // star 倾角 64. float tilt = 90.0f; 65. // star 距人的dist 66. float zoom = -10.0f; 67. float spin; // 闪烁星星的自转 68.
69. // init数据 70. public void initData() { 71. ByteBuffer byteBuffer = ByteBuffer.allocateDirect(vertex.length * 4); 72. byteBuffer.order(ByteOrder.nativeOrder());
73. vertexBuffer = byteBuffer.asIntBuffer();
74. vertexBuffer.put(vertex);
75. vertexBuffer.position(0); 76.
77. ByteBuffer coordByteBuffer = ByteBuffer
78. .allocateDirect(coord.length * 4); 79. coordByteBuffer.order(ByteOrder.nativeOrder());
80. coordBuffer = coordByteBuffer.asIntBuffer();
81. coordBuffer.put(coord);
82. coordBuffer.position(0); 83. }
84.
85. @Override 86. public void onDrawFrame(GL10 gl) { 87. // 清除屏幕和深度缓存 88. gl.glClear(GL10.GL_DEPTH_BUFFER_BIT | GL10.GL_COLOR_BUFFER_BIT);
89. // 初始化数据 90. initData();
91.
92. for (int i = 0; i < num; i++) { 93. gl.glLoadIdentity();
94. // 向屏幕里移入zoom 95. gl.glTranslatef(0.0f, 0.0f, zoom); 96.
97. gl.glRotatef(tilt, 1.0f, 0.0f, 0.0f); // 倾斜视角 98. gl.glRotatef(star[i].angle, 0.0f, 1.0f, 0.0f); // 旋转至当前所画星星的角度 99. gl.glTranslatef(star[i].dist, 0.0f, 0.0f); // 沿X轴正向移动 100. gl.glRotatef(-star[i].angle, 0.0f, 1.0f, 0.0f); // 取消当前星星的角度 101. gl.glRotatef(-tilt, 1.0f, 0.0f, 0.0f); // 取消屏幕倾斜 102.
103. // 开启顶点、颜色和纹理 104. gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
105. gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
106. gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
107.
108. if (twinkle) // 启用闪烁效果 109. {
110. // 使用byte型数值指定一个颜色 111. gl.glColor4f((float) star[(num - i) - 1].r / 255.0f, 112. (float) star[(num - i) - 1].g / 255.0f, 113. (float) star[(num - i) - 1].b / 255.0f, 1.0f); 114. gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuffer); 115. gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, coordBuffer); 116. // 绘制 117. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); 118. // 绘制结束 119. gl.glFinish();
120. }
121.
122. gl.glRotatef(spin, 0.0f, 0.0f, 1.0f); // 绕z轴旋转星星 123.
124. // 使用byte型数值指定一个颜色 125. gl.glColor4f((float) star[(num - i) - 1].r / 255.0f, 126. (float) star[(num - i) - 1].g / 255.0f, 127. (float) star[(num - i) - 1].b / 255.0f, 1.0f); 128.
129. gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuffer); 130. gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, coordBuffer); 131. // 绘制 132. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); 133. // 关闭顶点、颜色和纹理 134. gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
135. gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
136. gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
137.
138. spin += 0.01f; // 星星的公转 139. star[i].angle += (float) (i) / (float) num; // 改变星星的自转角度 140. star[i].dist -= 0.01f; // 改变星星离中心的距离 141.
142. if (star[i].dist < 0.0f) // 星星到达中心了么 143. {
144. // 往外移5个单位 145. star[i].dist += 5.0f; 146. // 赋一个新红色分量 147. star[i].r = random.nextInt(256); 148. // 赋一个新绿色分量 149. star[i].g = random.nextInt(256); 150. // 赋一个新蓝色分量 151. star[i].b = random.nextInt(256); 152. }
153. }
154. }
155.
156. @Override 157. public void onSurfaceChanged(GL10 gl, int width, int height) { 158. gl.glViewport(0, 0, width, height); 159. float ratio = (float) width / height; 160. gl.glMatrixMode(GL10.GL_PROJECTION);
161. gl.glLoadIdentity();
162. gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); 163. // 设置观察模型 164. gl.glMatrixMode(GL10.GL_MODELVIEW);
165. gl.glLoadIdentity();
166. }
167.
168. @Override 169. public void onSurfaceCreated(GL10 gl, EGLConfig config) { 170. gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
171. // 黑色背景色 172. gl.glClearColorx(0, 0, 0, 0); 173. // 启用阴影平滑 174. gl.glShadeModel(GL10.GL_SMOOTH);
175. // 启用深度测试 176. gl.glEnable(GL10.GL_DEPTH_TEST);
177. // 深度测试类型 178. gl.glDepthFunc(GL10.GL_LEQUAL);
179. // 设置深度缓存 180. gl.glClearDepthf(1.0f); 181.
182. // 启用纹理 183. gl.glEnable(GL10.GL_TEXTURE_2D);
184. // 生成纹理 185. gl.glGenTextures(1, textures, 0); 186. // 绑定纹理 187. gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 188. GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, Load.bitmap, 0); 189.
190. gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); // 设置混色函数取得半透明效果 191. gl.glEnable(GL10.GL_BLEND); // 启用混色 192.
193. // loop all star 194. for (int i = 0; i < num; i++) { 195. NiceStar starTmp = new NiceStar(); 196. // all star from 0 angle 197. starTmp.angle = 0.0f; 198. // calc star 距离 199. starTmp.dist = ((float) (i) / (float) num) * 5.0f; 200. // set red 201. starTmp.r = random.nextInt(256); 202. // set green 203. starTmp.g = random.nextInt(256); 204. // set blue 205. starTmp.b = random.nextInt(256); 206.
207. star[i] = starTmp;
208. }
209. }
210.}
211.
212.class NiceStar { 213. // star颜色 214. int r, g, b; 215. // star距中心距离 216. float dist; 217. // current star angle 218. float angle = 0.0f; 219.}
分享到:
相关推荐
`GLSurfaceView`充当OpenGL ES与Android View层次结构之间的桥梁,它不仅适应于Android Activity的生命周期,还简化了Framebuffer像素格式的选择,以及创建和管理绘图线程,确保动画效果平滑流畅。此外,它还提供了...
最后,了解如何与硬件加速的OpenGLES API交互,以及熟悉GLSL语言(OpenGL Shading Language),是成为OpenGL ES 2.0专家的必经之路。通过编写高效、可读性强的着色器代码,可以创造出各种复杂的视觉效果,实现令人...
在Android平台上,OpenGL ES是一种广泛使用的图形库,用于在移动设备上实现高性能的2D和3D图形渲染。本文将深入探讨如何使用OpenGL ES来绘制圆点,并介绍一种方法来优化圆点边缘的锯齿问题,提升视觉效果。 首先,...
平台:Android 语言:GLSL(OpenGL ES) 算法:MetaBall 效果:2D融球效果
在Android应用开发中,利用OpenGL ES可以实现许多视觉特效,其中包括模拟自然界中的雾气效果。本篇文章将深入探讨如何通过OpenGL ES在Android中实现雾气效果,并基于提供的"OpenGLFogTest"源码进行解析。 首先,...
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android平台上,它用于创建复杂的2D和3D图形效果。OpenGL ES(Embedded Systems)是OpenGL的轻量级版本,专为资源有限的移动设备设计。在Android系统中,...
该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建高性能的2D和3D图形。在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程...
本教程主要探讨如何在Android系统上,利用OpenGLES2.0图形库来处理和显示从Camera获取的YUV原始数据。YUV是一种常见的颜色空间,广泛应用于视频编码和解码,因为它对带宽的要求相对较低,特别适合移动设备。 首先,...
在这个"Android下 OpenGL ES 2.0 混合半透明效果demo"中,我们将探讨如何在Android应用中实现半透明效果的混合。 首先,理解OpenGL ES 2.0的核心概念至关重要。它基于着色器模型,这意味着开发者可以编写顶点着色器...
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
在Android的JNI层使用OpenGL ES,可以实现高性能的图形绘制,包括自定义UI元素、游戏图形和其他复杂视觉效果。要使用OpenGL ES,首先需要在JNI层初始化OpenGL ES上下文,然后创建顶点和纹理数据,最后通过绘制调用来...
含有以下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
OpenGL ES在Android平台上的应用是实现3D图形渲染的关键技术,而Obj文件格式是一种常见的3D模型数据交换格式。在Android开发中,如果想要将Obj格式的3D模型导入到应用中,就需要对OpenGL ES有深入的理解,并且掌握...
Android openGL ES 画球
android openGL 里面提供了illegalArgumentException异常的解决方法
在Android应用开发中,结合OpenGL ES 2.0和JNI,开发者可以实现更复杂、性能更强的图形特效,例如“水波纹效果”。 在Android中,OpenGL ES 2.0相比于1.0版本引入了着色器语言(GLSL),这使得开发者可以直接编写...
`GL10`接口是`javax.microedition.khronos.opengles`包中的一个核心接口,它继承自`GL`接口,并且是`GL11`接口的父接口。`GL10`接口封装了OpenGL ES的基本功能,包括核心渲染命令和其他一些重要的扩展特性。此接口...
Android平台上的OpenGL ES教程主要帮助开发者了解如何在Android应用程序中集成和使用这个库来创建交互式的图形界面。 在Android上设置OpenGL ES视图是开发过程中的第一步,而`GLSurfaceView`是实现这一目标的关键...
android openGL ES 2.0画等边三角形,正方形