OpenGL ES 矩阵旋转

原创 2015年08月17日 10:34:03

1、修改 Draw.java 新增方法

    /*
     * 画圆
     */
    public static void drawCircle(GL10 gl ,float r){
        List<Float> pos =new ArrayList<Float>();
        float x =0 ,y =0 ,z =0;
        for(float angle =0; angle <Math.PI *2 ;angle =(float)(angle +Math.PI /32)){
            x =(float) (r *Math.cos(angle));
            y =(float) (r *Math.sin(angle));
            
            pos.add(x);
            pos.add(y);
            pos.add(z);
        }
        
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.list2ByteBuffer(pos));
        gl.glDrawArrays(GL10.GL_LINES, 0, pos.size()/3);
    }
    
    /*
     * 画点
     */
    public static void drawPoint(GL10 gl ,float []pos,float size){
        gl.glPointSize(size);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.arr2ByteBuffer(pos));
        gl.glDrawArrays(GL10.GL_POINTS, 0, pos.length/3);
    }
    
    /*
     * 画点
     * 抗锯齿
     */
    public static void drawSmoothPoint(GL10 gl ,float []pos,float size){
        gl.glEnable(GL10.GL_POINT_SMOOTH);
        gl.glHint(GL10.GL_POINT_SMOOTH_HINT, GL10.GL_NICEST);//效果最好
        
//        gl.glEnable(GL10.GL_LINE_SMOOTH);
//        gl.glHint(GL10.GL_LINE_SMOOTH_HINT, GL10.GL_FASTEST);//速度最快
        
        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        
        gl.glPointSize(size);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.arr2ByteBuffer(pos));
        gl.glDrawArrays(GL10.GL_POINTS, 0, pos.length/3);
        
        gl.glDisable(GL10.GL_POINT_SMOOTH);
        gl.glDisable(GL10.GL_BLEND);
    }
2、新建 MyCirclePointRenderer.java

public class MyCirclePointRenderer extends MyAbstractRenderer {
	private float angle     =0;
	private float angleStep =(float) (Math.PI /180);
	public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
        //设置清屏色(背景)
        gl.glClearColor(0, 0, 0, 1);
        //启用顶点缓冲区
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    }
	
	protected void draw(GL10 gl) {
		float r =0.5f;
		float x =0,y =0;
		float pointSize= 15;
		
		//绘制红圆
		gl.glPushMatrix();
		gl.glColor4f(1, 0, 0, 1);
		Draw.drawCircle(gl, r);
		
		x =(float) (r *Math.cos(angle));
		y =(float) (r *Math.sin(angle));
		Draw.drawSmoothPoint(gl,new float[] {x,y,0},pointSize);
		gl.glPopMatrix();
		
		//绘制绿圆
		gl.glPushMatrix();
		gl.glRotatef(90, 1, 0, 0);
		gl.glRotatef(45, 0, 1, 0);
		gl.glColor4f(0, 1, 0, 1);
		Draw.drawCircle(gl, r);
		
		x =(float) (r *Math.cos(angle +Math.PI /2));
		y =(float) (r *Math.sin(angle +Math.PI /2));
		Draw.drawSmoothPoint(gl,new float[] {x,y,0},pointSize);
		
		gl.glPopMatrix();
		//绘制蓝圆
		gl.glPushMatrix();
		gl.glRotatef(90, 1, 0, 0);
		gl.glRotatef(-45, 0, 1, 0);
		gl.glColor4f(0, 0, 1, 1);
		Draw.drawCircle(gl, r);
		
		x =(float) (r *Math.cos(angle +Math.PI));
		y =(float) (r *Math.sin(angle +Math.PI));
		Draw.drawSmoothPoint(gl,new float[] {x,y,0},pointSize);
		gl.glPopMatrix();
		//每一帧 旋转一个角度
		angle +=angleStep;
	}
}
3、运行效果

  

版权声明:本文为博主原创文章,未经博主允许不得转载。

初学Android,OpenGL ES之旋转图形(八十一)

图形旋转比较简单,需要调用方法glRotatef(float angle,float x,float y,float z),angle是旋转角度,x,y,z是指的三轴这个例子在上篇基础上增加了旋转,在...
  • lee576
  • lee576
  • 2012年11月02日 16:43
  • 5736

OpenGL ES之glRotatef旋转详解

glRotatef函数的API中文参考文档请看:OpenGL ES之glRotate函数       void glRotatef(GLfloat angle,  GLfloat x,  GL...
  • wangyuchun_799
  • wangyuchun_799
  • 2012年07月30日 14:25
  • 27224

android opengl es 三角形、正方形自动旋转

public class MyRenderer implements Renderer {     static int one = 0x10000;     private IntBuffer ...
  • Simdanfeg
  • Simdanfeg
  • 2011年03月17日 13:11
  • 6470

Android 系列 5.2使用OpenGL ES绘制旋转立方体

5.2使用OpenGL ES绘制旋转立方体 问题 您想创建一个基本的OpenGL ES应用程序。 解 创建一个GLSurfaceView和一个自定义渲染器,将绘制一个旋转立方体。 讨论 Andro...
  • sergeycao
  • sergeycao
  • 2017年01月10日 09:25
  • 683

Android上opengl es3.0实现一个旋转的三角形(Android studio2.1.3)

  • 2016年11月13日 22:04
  • 22.11MB
  • 下载

【Android开发学习12】Android OpenGL ES 旋转glRotatef

1.旋转函数:    glRotatef(float angle, float X, float Y, float Z) 其中,angle指定对象旋转的角度,X,Y,Z三个参数共同决定旋转...
  • ypist
  • ypist
  • 2013年02月20日 15:54
  • 2106

[OpenGL ES 04]3D变换实践篇:平移,旋转,缩放

[OpenGL ES 04]3D变换实践篇:平移,旋转,缩放 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 ...
  • kesalin
  • kesalin
  • 2012年12月07日 22:15
  • 17818

opengl es3.0游戏开发学习笔记1-绘制旋转的三角形

前段时间一直在看opengl es2.0游戏开发的知识 ,这几天买了本opengl es3.0游戏开发的书   打算一边学习一边整理学习笔记,我的开发环境是Android studio 2.1.3...
  • qq_28637193
  • qq_28637193
  • 2016年11月13日 22:06
  • 1404

OpenGL ES总结(二)OpenGL坐标变换之平移及旋转

世界坐标系: 在OpenGL中,世界坐标系是以屏幕中心为原点(0, 0, 0),且是始终不变的。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。长度单位这样来定:窗口范围按此单位恰好...
  • hejjunlin
  • hejjunlin
  • 2017年03月13日 20:30
  • 3356

OpenGL 矩阵变换(讲的太好了~!)

Overview 几何数据——顶点位置,和标准向量(normal vectors),在OpenGL 管道raterization 处理过程之前可通过顶点操作(Vertex Operation)和基本...
  • lyx2007825
  • lyx2007825
  • 2013年04月12日 15:39
  • 83933
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL ES 矩阵旋转
举报原因:
原因补充:

(最多只允许输入30个字)