`
yuanyao
  • 浏览: 148251 次
  • 性别: Icon_minigender_1
  • 来自: 就那小山沟
社区版块
存档分类
最新评论

OpenGL ES 旋转的正方形

阅读更多

  继续正方形,让它旋转起来:

public class GL3 extends Activity {

	private GLSurfaceView mGLSurfaceView;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		mGLSurfaceView = new GLSurfaceView(this);
		mGLSurfaceView.setRenderer(new Three());
		setContentView(mGLSurfaceView);
	}

	@Override
	protected void onResume() {
		super.onResume();
		mGLSurfaceView.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		mGLSurfaceView.onPause();
	}
}

class Three implements Renderer {

	private Square square;
	private float rquad;
	
	public Three(){
		square = new Square();
	}
	
	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		gl.glShadeModel(GL10.GL_SMOOTH);
		gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
		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);
	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height) {
		if(height == 0){
			height = 1;
		}
		
		gl.glViewport(0, 0, width, height);
		gl.glMatrixMode(GL10.GL_PROJECTION);
		gl.glLoadIdentity();
		
		GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 100.0f);
		
		gl.glMatrixMode(GL10.GL_MODELVIEW);
		gl.glLoadIdentity();
	}

	@Override
	public void onDrawFrame(GL10 gl) {
		Log.i("onDrawFrame", "........." + rquad);
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		gl.glLoadIdentity();
		
		gl.glTranslatef(0.0f, 0.0f, -6.0f);
		
		/**
		 * 旋转函数 
		 * 用当前的矩阵乘一个旋转矩阵,将值作为当前矩阵
		 * 
		 * rquad为旋转角度,不断递增
		 */
//		gl.glRotatef(rquad, 1.0f, 0.0f, 0.0f);	//围绕X轴旋转
//		gl.glRotatef(rquad, 0.0f, 1.0f, 0.0f);	//围绕Y轴旋转
		gl.glRotatef(rquad, 0.0f, 0.0f, 1.0f);	//围绕Z轴旋转
		square.draw(gl);
		
		gl.glLoadIdentity();
		
		rquad += 0.5f;
	}

}

class Square {
	private FloatBuffer vertexBuffer;

	private float vertices[] = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, -1.0f,
			1.0f, 0.0f, 1.0f, 1.0f, 0.0f };

	public Square() {
		ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
		byteBuf.order(ByteOrder.nativeOrder());
		vertexBuffer = byteBuf.asFloatBuffer();
		vertexBuffer.put(vertices);
		vertexBuffer.position(0);
	}

	public void draw(GL10 gl) {
		gl.glFrontFace(GL10.GL_CW);
		gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
		//这里给正方形设置了颜色RGBA值
		gl.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);
		gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
		gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
	}
}

 

画正方形注释,见:http://yuanyao.iteye.com/blog/782474

分享到:
评论

相关推荐

    【OpenGL ES】立方体手动旋转(更新版)

    本资源主要讲解如何使用 OpenGL ES 绘制一个立方体,并通过触摸事件实现手动控制立方体的旋转,同时解决了立方体在旋转过程中可能出现的“裂开”问题。 首先,理解OpenGL ES的基本概念是必要的。OpenGL ES 提供了一...

    android opengles 贴图旋转3D立方体

    在本文中,我们将深入探讨如何使用OpenGL ES在Android应用中实现一个贴图旋转的3D立方体。首先,我们需要理解OpenGL ES的基本概念,然后逐步构建这个示例项目。 1. **OpenGL ES基础知识**: OpenGL ES是基于OpenGL...

    Android OpenGL ES 简明开发教程四:3D 坐标变换

    OpenGL ES通过`glRotatef(float angle, float x, float y, float z)`函数实现旋转,其中`angle`是以度为单位的旋转角度,`(x, y, z)`定义旋转轴。旋转的顺序对结果有重大影响。例如,如果先绕x轴旋转,再绕y轴旋转,...

    安卓ndk实现opengl绘制正方形纹理

    本话题将深入探讨如何利用NDK和OpenGL ES在Android平台上实现正方形纹理的绘制。 OpenGL ES是OpenGL的一个轻量级版本,专门针对嵌入式设备,如智能手机和平板电脑设计。在Android系统中,我们可以使用Java的Android...

    Android平台下的全景视频播放器配套教程——1.3 用OpenGL ES 2.0显示一张图片

    本教程将深入探讨如何利用OpenGL ES 2.0这一强大的图形处理接口来显示一张全景图片,为全景视频播放器的构建打下基础。 首先,理解OpenGL ES 2.0是至关重要的。OpenGL ES(Embedded Systems)是OpenGL的一个子集,...

    OpenGLES20_Lesson07_primitive3_基本图元的绘制之正方形平移、旋转、缩放_

    基本图元绘制,实现对正方形的平移,旋转,缩放

    openGL ES for Iphone

    默认情况下,该模板包含了一个旋转的彩色正方形示例代码。 #### 三、转换视图以支持深度缓冲 大多数OpenGL教程都从2D图形开始,通常使用(X,Y)坐标系统而不是更常用的三维坐标系(X,Y,Z)。然而,为了实现真正的3D...

    罗大柚OpenGL_ES系列教程LessonTwo(Part 4)_Cube

    OpenGL ES 是一种针对嵌入式设备的图形处理标准,它基于桌面版的OpenGL,并为移动设备如智能手机和平板电脑优化。在"罗大柚OpenGL_ES系列教程LessonTwo(Part 4)_Cube"中,我们将深入探讨如何在iOS平台上利用GLKit...

    002--正方形键盘控制.zip

    在"002--正方形键盘控制.zip"这个压缩包中,我们可能找到了一个关于使用OpenGL ES来控制正方形图形的示例项目。 这个项目的名称"正方形键盘控制"暗示了它可能包含一个用户界面,用户可以通过键盘输入来控制一个...

    android opengl-ES 魔方 纹理贴图

    在这个项目中,"android opengl-ES 魔方 纹理贴图"的主题涉及到在Android设备上使用OpenGL-ES来创建一个旋转的三维魔方,并且为每个面应用纹理贴图,同时实现手势识别功能来操控魔方的转动。 首先,我们来看一下...

    OpenGL3DDemo.rar

    这个项目的核心是通过OpenGL ES(针对嵌入式系统的OpenGL版本)来创建和操纵一个可交互的3D立方体。 首先,让我们深入了解一下OpenGL。OpenGL是一个开放标准的库,用于生成静态和动态的图像。它提供了大量的函数,...

    使用OPENGL建立三维模型(齿轮,圆柱,立方体,四面体)

    OpenGL提供了一系列的变换函数,如`glTranslate`、`glRotate`和`glScale`,用于改变物体的位置、旋转和大小。在构建模型时,这些变换是必不可少的。 7. **着色和光照** 为了使模型看起来更真实,需要应用颜色和...

    Android OpenGL 3D 立方体多纹理贴图源码

    在Android平台上,OpenGL ES(Embedded Systems)是它的移动版本,被广泛应用于游戏开发、复杂的用户界面以及视觉效果丰富的应用程序。这个"Android OpenGL 3D 立方体多纹理贴图源码"是一个很好的学习资源,它涵盖了...

    Opengl_3d卷轴效果

    本文主要介绍如何在OpenGL ES环境中实现3D卷轴效果,并对其关键代码进行分析。 #### 二、核心概念 ##### 2.1 3D卷轴效果 3D卷轴效果通常指的是在一个三维场景中模拟物体随时间推移而移动的现象,常见的应用场景包括...

    Android应用源码OpenGL 3D立方体多纹理贴图.zip

    本项目"Android应用源码OpenGL 3D立方体多纹理贴图"是一个示例,展示了如何在Android平台上利用OpenGL ES(OpenGL针对嵌入式系统的版本)进行3D图形渲染,并实现多纹理贴图。下面我们将深入探讨其中涉及的关键知识点...

    opengl:android OpenGL范例

    具有触摸事件的2D正方形和三角形可旋转三角形API 8+ Opengl2ex1使用渲染器(来自lessonOne)和mainactivity来设置所有内容注意:此示例在仿真器中可能会失败,但可在物理设备上运行。 Opengl2ex2扩展了...

    android 立方体旋转效果

    1. **创建立方体**: 在Android中,我们可以使用OpenGL ES或Canvas来创建3D几何形状,如立方体。立方体由六个正方形面组成,每个面都有自己的坐标。使用`Mesh`或自定义`View`,结合`RectF`等工具,可以创建出立方体的...

    旋转的立方体

    此外,“选择”可能指的是如何在OpenGL版本之间进行选择,例如选择使用旧的OpenGL ES 2.0还是现代的OpenGL ES 3.x。 通过学习和理解这个"旋转的立方体"示例,开发者不仅可以掌握OpenGL的基本原理,还能进一步探索更...

    【计算机专业-Andorid项目源码100套之】OpenGL 3D立方体多纹理贴图

    在OpenGL中,一个立方体由六个正方形面构成,每个面由两个三角形拼接而成。通过定义顶点坐标和法线向量,我们可以构建出立方体的几何形状。这些顶点信息会被组织成顶点数组,然后传递给OpenGL进行渲染。 接着,多...

    AndroidOpenGLDemo-master:OpenGL 3D开发原始程序圆顶

    说明这是一个Android OpenGLES2.0从零开始的Demo程序,仅做个人学习OpenGLES的记录,并提供给后来初学者参考。若有相关问题,也非常乐意与大家一起讨论共同进步。关于Android OpenGLES2.0学习的博客,也相当于这个...

Global site tag (gtag.js) - Google Analytics