Android为OpenGL ES支持,提供GLSurfaceView组件,这个组件用于显示3D图形。GLSurfaceView本身并不提供绘制3D图形的功能,而是由GLSurfaceView.Renderer来完成SurfaceView中3D图形的绘制。1. 在Android中使用OpenGL ES需要三个步骤。1.创建GLSurfaceView组件,使用Activity来显示GLSurfaceView组件。2.为GLSurfaceView组件创建GLSurfaceView.Renderer实例,实现GLSurfaceView.Renderer类时需要实现该接口里的三个方法。 abstract void onDrawFrame(GL gl),绘制GLSurfaceView的当前帧 abstract void onSurfaceCreated(GL gl, EGLConfig config),当GLSurfaceView的大小改变的时回调该方法。 abstract void onSurfaceChanged(GL gl, int width, int height),当GLSurfaceView被创建时回调该方法。3.调用当GLSurfaceView组件的setRenderer()方法制定Renderer对象,该对象完成GLSurfaceView里3D图形的绘制2. 旋转public abstract void glRotatef (float angle, float x, float y, float z) ,控制图形中心移动public abstract void glTranslatef (float x, float y, float z) ,控制图形沿着制定轴转动制定角度实现OnGestureListener的方法对手势监听,配合上面的两个函数,可以实现图形随着手势变化3. 关于BufferglVertexPointer 设置顶点位置数据时,需要ByteBuffer/InitBuffer等,必须是native Buffer对于FloatBuffer不可以直接用FloatBuffer.wrap将float[]数组转为FloatBuffer,会报如下错误“ Must use a native order direct Buffer”可以使用如下函数进行转化:private FloatBuffer floatBufferUtil(float[] arr){FloatBuffer mBuffer;// 初始化ByteBuffer,长度为arr数组的长度*4,因为一个int占4个字节ByteBuffer qbb = ByteBuffer.allocateDirect(arr.length * 4);// 数组排列用nativeOrderqbb.order(ByteOrder.nativeOrder());mBuffer = qbb.asFloatBuffer();mBuffer.put(arr);mBuffer.position(0);return mBuffer;} 4. public abstract void glDrawArrays (int mode, int first, int count) 绘制平面图形,第一个参数指定图形的类型,第二个参数指定从那个顶点开始绘制,第三个参数总共绘制的点数 public abstract void glDrawElements (int mode, int count, int type, Buffer indices) 根据indices指定的索引点来绘制三角形,可以绘制3D图形, 第一个参数是绘制图形的类型,第二个参数指定包含多少个顶点,indices包含长度为3N的数组 5. 纹理的设置public abstract void glGenTextures (int n, int[] textures, int offset) 设置一次性生成n个纹理,所生成的纹理代号放入textures中,offset指定从第几个数组元素开始存放纹理代码public abstract void glBindTexture (int target, int texture) 将texture纹理绑定到target目标上public abstract void glTexParameterf (int target, int pname, float param)
推荐整理分享在android使用OPENGL总结(android openconnect),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:使用androidx,安卓调用opencv,android open,android open accessory,android openal,使用androidx,android openal,在android使用menu时可能需要重写的方法,内容如对您有帮助,希望把文章链接给更多的朋友!
为target纹理目标设置属性,第二个参数是属性名,第三个参数是属性
主要代码如下:
opengl示例代码在vs上编译不过 官方解释,需要在includeglut.h前#ifndefGLUT_DISABLE_ATEXIT_HACK#defineGLUT_DISABLE_ATEXIT_HACK#endif
openGL粒子系统实现(面向对象风格) 使用基本openGL(非GLSL)实现一个面向对象风粒子系统。粒子系统基本有两部分构成粒子粒子发生器一个粒子发生器控制一群粒子的行为,比如一条流水
景深图片的3d显示(opengl) =='''效果展示'''==这篇wiki介绍一下对景深图片进行3d显示的效果。展现形式为:可以对一张照片中的景物做轻微角度变化的观看,图片中的物体将呈现3d