android中OpenGl初步(平面三角形,正方形)
2016-11-17 13:30
288 查看
效果图:
1.绘图类
1.绘图类
/** * Created by LH on 2016/11/16. */ public class OpenGLRender implements GLSurfaceView.Renderer { private float[] mTriangleArray = { 0f,1f,0f, -1f,-1f,0f, 1f,-1f,0f }; private FloatBuffer mTriangleBuffer; private float[] mColorArray={ 1f,0f,0f,1f, //红 0f,1f,0f,1f, //绿 0f,0f,1f,1f //蓝 }; private FloatBuffer mColorBuffer; //正方形的四个顶点 private FloatBuffer quateBuffer ; private float[] mQuateArray = { -1f, -1f, 0f, 1f, -1f, 0f, -1f, 1f, 0f, 1f, 1f, 0f, }; @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 启用阴影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 白色背景 gl.glClearColor(1.0f,1.0f,1.0f,0f); // 设置深度缓存 gl.glClearDepthf(1.0f); // 启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度测试的类型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告诉系统对透视进行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); // 启用顶点数组 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 启用颜色数组 gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // 把三角形顶点转化成缓冲对象 mTriangleBuffer = BufferUtil.floatToBuffer(mTriangleArray); // 把颜色转化成缓冲对象 mColorBuffer = BufferUtil.floatToBuffer(mColorArray); // 把正方形顶点转化成缓冲对象 quateBuffer = BufferUtil.floatToBuffer(mQuateArray); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // 设置视口 gl.glViewport(0, 0, width, height); // 宽高比 float ratio = (float) width / (float) (height == 0 ? 1 : height); // 设置当前矩阵堆栈为投影矩阵 gl.glMatrixMode(GL10.GL_PROJECTION); // 对投影矩阵的任何改变都清除掉 gl.glLoadIdentity(); // 实现Surface和坐标系之间的映射关系 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); } @Override public void onDrawFrame(GL10 gl) { // 清除颜色缓冲 gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT); // 对模型视景矩阵操作 gl.glMatrixMode(GL10.GL_MODELVIEW); // 对模型视景矩阵的任何改变都清除掉 gl.glLoadIdentity(); // 使用数组作为颜色 gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer); // 绘制小三角形 gl.glLoadIdentity(); // x轴平移-1.5 z轴平移-6.0(向里) gl.glTranslatef(-1.5f, 0.0f, -6.0f); // y轴扩大2倍 gl.glScalef (1.0f, 2.0f, 1.0f); // 表示模型沿着(0,0,1)这个轴旋转10° gl.glRotatef(10.0f, -1.5f, 0.0f, -6.0f); // 设置顶点。第一个参数为顶点包含的数据长度。第二个参数为单位 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mTriangleBuffer); // 绘制。第一个参数绘制模式,第二个从缓存中哪一位开始绘制,第三个顶点的数量 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 结束绘制 gl.glFinish(); // 绘制正方形 gl.glLoadIdentity(); gl.glTranslatef(1.5f, 0.0f, -6.0f); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, quateBuffer); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); gl.glFinish(); } }2.获取缓冲对象工具类
/** * Created by LH on 2016/11/16. */ public class BufferUtil { public static FloatBuffer floatToBuffer(float[] a){ FloatBuffer mBuffer; //先初始化buffer,数组的长度*4,因为一个float占4个字节 ByteBuffer mbb = ByteBuffer.allocateDirect(a.length*4); //数组排序用nativeOrder mbb.order(ByteOrder.nativeOrder()); mBuffer = mbb.asFloatBuffer(); mBuffer.put(a); mBuffer.position(0); return mBuffer; } public static IntBuffer intToBuffer(int[] a){ IntBuffer intBuffer; //先初始化buffer,数组的长度*4,因为一个float占4个字节 ByteBuffer mbb = ByteBuffer.allocateDirect(a.length*4); //数组排序用nativeOrder mbb.order(ByteOrder.nativeOrder()); intBuffer = mbb.asIntBuffer(); intBuffer.put(a); intBuffer.position(0); return intBuffer; } }3.调用方法
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); GLSurfaceView glSurfaceView=new GLSurfaceView(this); glSurfaceView.setRenderer(new OpenGLRender()); setContentView(glSurfaceView); } }
相关文章推荐
- Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)
- Android OpenGL 入门示例----绘制三角形和正方形
- Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)
- Android OpenGL学习笔记(二)之----三角形的绘制.
- android opengl 画三角形
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- Android openGL ES 2.0入门--画三角形、正方形
- Android OpenGL实战一——开发框架搭建、三角形和四边形的绘制
- Android--Android平台下OpenGL初步
- Android平台下OpenGL初步
- Android基于OpenGL在GLSurfaceView上绘制三角形及使用投影和相机视图方法示例
- 【附源码】【Android 3D OpenGL】开发之二——旋转的三角形【MacroCheng原创】
- 【附源码】【Android 3D OpenGL】开发之二——旋转的三角形【MacroCheng原创】
- android之OpenGL、OpenGL ES初步
- Android平台下OpenGL初步
- Android OpenGL学习笔记(二)之----三角形的绘制.
- Android OpenGL ES和OpenGL一起学(三)——练习:一个不会改变形状的正方形
- 基于Android的OpenGL—在 GLSurfaceView上绘制三角形和使用投影和相机视图
- Android平台下OpenGL初步使用
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)