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(九)----构建几何物体

1.三角形扇 一个三角形扇以一个中心顶点作为起始,使用相邻的两个顶点创建第一个三角形,接下来的每个顶点都会创建一个三角形,围绕起始的中心点按扇形展开。为了使这个扇形闭合,我们只需要在最后重复...

Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵

我们现在准备好在代码中添加透视投影了。Android的Matrix类为它准备了两个方法------frustumM()和perspectiveM()。不幸的是,frustumM()的个缺陷,它会影响某...

opengl es矩阵变换

opengl es 三大变换:模型变换、视图变换、投影变换模型变换: mMMatrix[16], [4*4]矩阵, 包括平移、比例缩放、旋转 平移: Matrix.translateM( ...

从零开始学习OpenGL ES之七 – 变换和矩阵

今天的主题是我一度谈之色变的。概念上讲,它是3D编程中最为困难的部分。首先,你应该理解 3D 几何和笛卡尔坐标系他。你还应该理解由顶点构成的三角形组成的OpenGL虚拟世界的物体,各顶点定义了三维空间...

从零开始学习OpenGL ES之七 – 变换和矩阵

今天的主题是我一度谈之色变的。概念上讲,它是3D编程中最为困难的部分。   首先,你应该理解 3D 几何和笛卡尔坐标系他。你还应该理解由顶点构成的三角形组成的OpenGL虚拟世界的物体,各...

opengl es1.1 NDK 旋转的立方体

  • 2014年11月11日 18:17
  • 2.1MB
  • 下载

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

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

【Android 应用开发】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解

最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 ....

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

[OpenGL ES 04]3D变换实践篇:平移,旋转,缩放 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议...
  • s_s520
  • s_s520
  • 2013年12月24日 11:11
  • 911
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL ES 矩阵旋转
举报原因:
原因补充:

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