Android的OpenGL学习笔记(4)
16lz
2021-01-23
Android的OpenGL学习笔记(4)
这次主要是给前几次笔记做出的三角形上色呵呵……
其实很简单,只需添加几句话就行了,主要变化在VortexRenderer.java代码中,现把代码贴出来:
Code:- packagecom.droidnova.android.games.vortex;
- importjava.nio.ByteBuffer;
- importjava.nio.ByteOrder;
- importjava.nio.FloatBuffer;
- importjava.nio.ShortBuffer;
- importjavax.microedition.khronos.egl.EGLConfig;
- importjavax.microedition.khronos.opengles.GL10;
- importandroid.opengl.GLSurfaceView;
- publicclassVortexRendererimplementsGLSurfaceView.Renderer{
- privatestaticfinalStringLOG_TAG=VortexRenderer.class.getSimpleName();
- privatefloat_red=0f;
- privatefloat_green=0f;
- privatefloat_blue=0f;
- //arawbuffertoholdindicesallowingareuseofpoints.
- privateShortBuffer_indexBuffer;
- //arawbuffertoholdthevertices
- privateFloatBuffer_vertexBuffer;
- //arawbuffertoholdthecolors
- privateFloatBuffer_colorBuffer;
- privateshort[]_indicesArray={0,1,2};
- privateint_nrOfVertices=3;
- privatefloat_angle;
- @Override
- publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){
- //preparation
- gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//允许设置顶点
- gl.glEnableClientState(GL10.GL_COLOR_ARRAY);//允许设置颜色
- initTriangle();
- }
- @Override
- publicvoidonSurfaceChanged(GL10gl,intw,inth){
- gl.glViewport(0,0,w,h);
- }
- publicvoidsetAngle(floatangle){
- _angle=angle;
- }
- @Override
- publicvoidonDrawFrame(GL10gl){
- //definethecolorwewanttobedisplayedasthe"clippingwall"
- gl.glClearColor(_red,_green,_blue,1.0f);
- //resetthematrix-goodtofixtherotationtoastaticangle
- gl.glLoadIdentity();
- //clearthecolorbuffertoshowtheClearColorwecalledabove...
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
- //setrotationforthenon-statictriangle
- gl.glRotatef(_angle,0f,1f,0f);
- //gl.glColor4f(0.5f,0f,0f,0.5f);
- gl.glVertexPointer(3,GL10.GL_FLOAT,0,_vertexBuffer);//设置顶点数组
- gl.glColorPointer(4,GL10.GL_FLOAT,0,_colorBuffer);//设置颜色数组
- gl.glDrawElements(GL10.GL_TRIANGLES,_nrOfVertices,GL10.GL_UNSIGNED_SHORT,_indexBuffer);
- }
- privatevoidinitTriangle(){
- //floathas4bytes
- ByteBuffervbb=ByteBuffer.allocateDirect(_nrOfVertices*3*4);
- vbb.order(ByteOrder.nativeOrder());
- _vertexBuffer=vbb.asFloatBuffer();
- //shorthas4bytes
- ByteBufferibb=ByteBuffer.allocateDirect(_nrOfVertices*2);
- ibb.order(ByteOrder.nativeOrder());
- _indexBuffer=ibb.asShortBuffer();
- //floathas4bytes,4colors(RGBA)*numberofvertices*4bytes
- ByteBuffercbb=ByteBuffer.allocateDirect(4*_nrOfVertices*4);
- cbb.order(ByteOrder.nativeOrder());
- _colorBuffer=cbb.asFloatBuffer();
- float[]coords={
- -0.5f,-0.5f,0f,//(x1,y1,z1)
- 0.5f,-0.5f,0f,//(x2,y2,z2)
- 0.5f,0.5f,0f//(x3,y3,z3)
- };
- float[]colors={
- 1f,0f,0f,1f,//point1
- 0f,1f,0f,1f,//point2
- 0f,0f,1f,1f,//point3
- };
- _vertexBuffer.put(coords);
- _indexBuffer.put(_indicesArray);
- _colorBuffer.put(colors);
- _vertexBuffer.position(0);
- _indexBuffer.position(0);
- _colorBuffer.position(0);
- }
- publicvoidsetColor(floatr,floatg,floatb){
- _red=r;
- _green=g;
- _blue=b;
- }
- }
最终效果图:
更多相关文章
- Android OpenGL学习笔记(二)--三角形的绘制.
- Android OpenGL学习笔记(二)之----三角形的绘制.
- Android定义字符串数组资源并在程序中使用
- Android OpenGL 画简单的三角形
- OpenglES2.0 for Android:来画个三角形吧
- Android 利用Sharp样式设置文本框EditText圆角形状
- Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值
- 浅析Android位置权限以及数组寻找索引的坑