`
dyingearth
  • 浏览: 3173 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android下用OpenGL画的一个旋转的圆形

阅读更多
这是我在android下用OGL ES画的第一个图形,Render的override部分引用了其它同学的一些代码
怎么上截图?

public class GLRender implements Renderer{

	
	float rotateAngle;
	
	//顶点数组,GL ES只能用这个办法画圆吗?
	private float[] vertices = new float[720];

	//度到弧度的转换
    public float DegToRad(float deg)
    {
    	return (float) (3.14159265358979323846 * deg / 180.0);
    }

	
    @Override
    public void onDrawFrame(GL10 gl) {
        // TODO Auto-generated method stub
    	
        // 进入这个函数第一件要做的事就是清除屏幕和深度缓存
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

        //画圆形
    	drawCircle(gl);
    }
    
    public void drawCircle(GL10 gl)
    {
        //重置投影矩阵
        gl.glLoadIdentity();
        // 移动操作,移入屏幕(Z轴)5个像素, x, y , z
        gl.glTranslatef(0.0f, 0.0f, -5.0f);
        
        //旋转, angle, x, y , z
        gl.glRotatef(rotateAngle, 1.0f, 0.0f, 0.0f);

        // 设置当前色为红色, R, G, B, Alpha
        gl.glColor4f(1.0f, 0.1f, 0.1f, 1.0f);
        
        //设置圆形顶点数据,这个是在创建时生成
    	FloatBuffer verBuffer = FloatBuffer.wrap(vertices);

    	//设置顶点类型为浮点坐标(GL_FLOAT),不设置或者设置错误类型将导致图形不能显示或者显示错误
    	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, verBuffer);

        //打开顶点数组
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        
    	//向OGL发送实际画图指令
    	gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 360);
    	
        //关闭顶点数组功能
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

        //画图结束
        gl.glFinish();
        
        //更改旋转角度
        rotateAngle += 0.5;
    }
    

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        // TODO Auto-generated method stub
        
        float ratio = (float) width / height;
        //设置OpenGL场景的大小
        gl.glViewport(0, 0, width, height);
        //设置投影矩阵
        gl.glMatrixMode(GL10.GL_PROJECTION);
        //重置投影矩阵
        gl.glLoadIdentity();
        // 设置视口的大小
        gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
        // 选择模型观察矩阵
        gl.glMatrixMode(GL10.GL_MODELVIEW);    
        // 重置模型观察矩阵
        gl.glLoadIdentity();    
        
    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // TODO Auto-generated method stub
        // 启用阴影平滑
        gl.glShadeModel(GL10.GL_SMOOTH);
        // 黑色背景
        gl.glClearColor(0, 0, 0, 0);
        // 设置深度缓存
        gl.glClearDepthf(1.0f);                            
        // 启用深度测试
        gl.glEnable(GL10.GL_DEPTH_TEST);                        
        // 所作深度测试的类型
        gl.glDepthFunc(GL10.GL_LEQUAL);                            
        
        // 告诉系统对透视进行修正
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
        
        
        //初始化圆形数据
    	for (int i = 0; i < 720; i += 2) {
    	    // x value
    	    vertices[i]   = (float) (Math.cos(DegToRad(i)) * 1);
    	    // y value
    	    vertices[i+1] = (float) (Math.sin(DegToRad(i)) * 1);
    	}
    }
}


完整程序见附件
  • 大小: 8.7 KB
分享到:
评论
2 楼 jacksonzhang 2010-12-16  
               看看
1 楼 dyingearth 2010-12-16  
再补充一点:
上面的例子画的是实心的圆,如果想画空心的圆只要把这句:
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 360);  
改为
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 360);
即可

嘿嘿,我也是多此一举,玩GL的高手就不要笑了,这个是给刚初学GL的同学看的

相关推荐

    androidopenGl材料我收集的,值得下载借鉴.pdf

    这份“androidopenGl材料我收集的,值得下载借鉴.pdf”文档可能包含了多个关于使用OpenGL ES在Android上进行3D图形编程的关键知识点。 1. **画球与画圆** OpenGL ES不直接提供画圆或球的函数,开发者通常需要通过...

    opengles的一些图形绘制

    - **圆**:可以使用顶点数组创建一个圆形,每个顶点对应弧度空间的一个角度,并通过适当的顶点顺序连接形成一个圆。 - **圆环**:圆环是两个同心圆之间的环状区域,可以通过在圆周上选择多个点,然后用线段连接...

    【OpenGL ES】凸镜贴图

    在这个【OpenGL ES】凸镜贴图的知识点中,我们将深入探讨如何使用OpenGL ES在3D模型上实现一个动态的圆形图片贴图效果,如同凸镜一般的视觉体验。 首先,我们要理解纹理贴图(Texture Mapping)的概念。在3D图形...

    Android应用源码之指南针 源码.zip

    在Android平台上,开发一款指南针应用是一个常见的任务,它能够帮助用户确定方向,尤其是在户外活动或者导航时非常有用。这份"Android应用源码之指南针 源码.zip"提供了完整的指南针应用源代码,是学习和理解Android...

    《Pro Android Games》第二个例子测试

    开发者可能使用了简单的矢量运算来处理物体的移动和旋转,同时利用矩形或圆形碰撞检测算法来判断玩家的飞船与小行星之间的碰撞。这些基础的物理模拟技术对于游戏的可玩性和真实性有着直接影响。 在图形渲染方面,...

    android桌面滑屏特效

    在这种效果下,屏幕上的图标似乎沿着一个圆形路径移动,给人以旋转的视觉感受。实现这一效果通常需要自定义布局,并结合复杂的数学计算来确定每个元素的移动轨迹和速度。可能需要用到Matrix类进行坐标转换,以及使用...

    Android应用源码之100种图片处理效果大全项目.rar

    《Android应用源码之100种图片处理效果大全项目》是一个非常实用的学习资源,它提供了丰富的图片处理技术实现,适合Android开发者深入理解和实践。在这个项目中,你可以找到各种图片处理技术的应用实例,涵盖了许多...

    android雷电射击游戏.rar

    这可以通过状态模式实现,每个状态对应一个类,负责处理该状态下所有的行为。 总之,《Android雷电射击游戏》的源码涵盖了Android游戏开发的多个方面,包括图形渲染、对象管理、碰撞检测、音频处理、用户输入、UI...

    android指南针

    在Android平台上,开发一款...综上所述,创建一个“android指南针”应用涉及了Android传感器的使用、坐标转换、UI设计、性能优化等多个技术点。通过实践这些知识点,可以构建出一个实用且具有用户友好的指南针应用。

    Android 指南针程序

    3. **OpenGL ES**:为了在屏幕上绘制动态的指南针指针,可能使用了OpenGL ES,这是一个针对嵌入式系统的图形库,特别适合移动设备。开发者可能使用OpenGL ES来创建3D模型和动画效果,使指南针的转动更加逼真。 4. *...

    Cricle3DZoom

    总结来说,Cricle3DZoom是一个利用OpenGL ES和Android动画框架实现的3D圆形缩放效果,它通过3D变换技术为用户界面注入了活力与创新。掌握这项技术,不仅可以提升应用的视觉表现力,还能为用户提供更有趣、更具沉浸感...

    Android 常用图片特效处理源码.rar

    要实现圆形头像,可以使用肖像模式下的BitmapShader或者自定义View来裁剪图片成圆形。 8. **动画效果**: 使用Android的Transition框架或Lottie库可以实现图片的动画效果,如淡入淡出、平移、缩放等。 9. **图片...

    android常用图片特效处理.zip

    8. **圆角图片**:要让图片显示为圆形或带有圆角,可以使用`Paint`的`setShader()`方法结合`BitmapShader`创建一个圆形或者圆角的Bitmap。另外,`ImageView`的`android:background`属性也可以设置为带有圆角的形状。...

    安卓Android源码——基于JBox2D的安卓Android游戏开发全源码.rar

    此外,理解OpenGL ES或者使用Android的SurfaceView和Canvas进行图形绘制也是必备技能。 在这个源码中,你可能还会看到如何将JBox2D与Android的SurfaceView结合,创建一个自定义的GameView类,以便在单独的线程中...

    TextureView实现自定义相机预览、拍照

    在Android开发中,TextureView是一种可以显示视频流...总的来说,使用TextureView来实现自定义相机预览和拍照,不仅可以提供流畅的用户体验,还能方便地处理图像变形和自定义照片效果,是Android开发中的一个重要技巧。

Global site tag (gtag.js) - Google Analytics