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.}
分享到:
相关推荐
Android OpenGL ES 简明开发教程
Android OpenGl ES用点绘制的方式绘制圆点,并对圆点进行抗锯齿优化。
平台:Android 语言:GLSL(OpenGL ES) 算法:MetaBall 效果:2D融球效果
android opengl es 粒子,火焰,android opengl es 粒子,火焰
该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106
android opengles2.0水波纹效果,
Android 3D游戏开发技术宝典 OpenGL ES2.0学习。
android opengles 贴图旋转3D立方体,源码和apk
程序主要实现一个类似长方体的旋转效果,可以通过点击按钮或者向右滑动屏幕触发。...1. 如何用opengl 画3D模型,如何贴纹理 2. 如何实现一个全屏的长方体 3. 如何使用handler实现跨进程的通信 4. 如何解决闪屏的问题
android OpenGL ES 中文 API
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之OpenGL ES教程,Android开发之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
Android openGL ES 画球
Android平台采集Camera的YUV原始数据后使用OpenGLES2.0显示,内置YV12格式的YUV分量分离。 附件为完整例子,感谢“李狗蛋52635”提供的GLProgram类。
Android OpenGL ES (二) 绘制三维/空间坐标系 透明的立体图加三维向量和xyz坐标轴 源代码包,直接倒入eclips修改packadge便可用
android openGL 里面提供了illegalArgumentException异常的解决方法
使用OpenGL ES实现自然界的雾气效果,雾气效果很简单,我们今天就使用系统自带的三种雾气渲染算法来实现不同的效果,当然你可以自己设置雾气的颜色和范围程度等。
android openGL ES 2.0画等边三角形,正方形
Android平台,OpenGL ES3.0 点、线、三角形绘制方式源码实现举例。 相关绘制方式文章讲解请参考: https://xiaxl.blog.csdn.net/article/details/8873002