`

Android OpenGL实战一——开发框架搭建、三角形和四边形的绘制

阅读更多
        OpenGL(Open Graphics Library)定义了一个跨编程语言、跨平台的编程接口的规格,是一个性能卓越的三维图形标准!

        OpenGL ES与OpenGL的区别:

                OpenGL ES是专为内嵌和移动设备设计的一个2D/3D轻量级图形库,它基于OpenGL API设计,是OpenGL三维图形API的子集

        Android里有三个与OpenGL有关的包:

                android.opengl

                javax.microedition.khronos.egl

                javax.microedition.khronos.opengles

       

        今天用到的不多,只有几个类而已

        首先,写一个类实现Renderer接口,并实现它的三个抽象方法,要吃饭了,直接上代码吧

       
package com.zjc.test;


import java.nio.IntBuffer;


import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;


import android.opengl.GLSurfaceView.Renderer;


public class GLReader implements Renderer{

private int one = 0x10000;

//三角形的三个顶点

private IntBuffer triggerBuffer=IntBuffer.wrap(new int[]{

0,one,0,
//上顶点

-one,-one,0,
//做顶点

one,-one,0
//右顶点

});

//四边形的四个顶点

private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{

one,one,0,

-one,one,0,

one,-one,0,

-one,-one,0});

/**

* 所有绘图的工作放到此方法里

*/

@Override

public void onDrawFrame(GL10 gl) {

//清除屏幕和深度缓存

gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT );

//重置当前的模型观察矩阵

gl.glLoadIdentity();



// 左移 1.5 单位,并移入屏幕 6.0

gl.glTranslatef(-1.5f, 0.0f, -6.0f);

//开启顶点设置功能

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

/**

* 设置顶点数据

* 参数:

* 1、顶点尺寸----这里使用的是xyz坐标系,所以是3


* 2、顶点类型----这里是固定的,所以用GL_FIXED


* 3、步长        


* 4、顶点缓存----即顶点数组

*/

gl.glVertexPointer(3,GL10.GL_FIXED, 0, triggerBuffer);

/**

* 绘制顶点

* 参数:

* 1、绘制的模式----我们使用GL_TRIANGLES来表示绘制三角形

* 2、开始位置

* 3、要绘制的顶点计数

*/

gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);



//重置当前的模型观察矩阵

gl.glLoadIdentity();



//右移1.5,进入6.0

gl.glTranslatef(1.5f, 0.0f, -6.0f);

//设置四边形顶点数据

gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);

//绘制顶点(注意参数一不同)

gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);



//取消顶点设置

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);







}

/**

* 当窗口大小发生改变是调用此方法

* 不管窗口大小是否已经改变,此方法至少执行一次

* 所以在此方法中设置OpenGL场景的大小

*/

@Override

public void onSurfaceChanged(GL10 gl, int width, int height) {

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) {

//对透视进行修正

gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

//背景:黑色

gl.glClearColor(0, 0, 0, 0);

//启动阴影平滑

gl.glShadeModel(GL10.GL_SMOOTH);



//设置深度缓存

gl.glClearDepthf(1.0f);

//启用深度测试

gl.glEnable(GL10.GL_DEPTH_TEST);

//所做深度测试的类型

gl.glDepthFunc(GL10.GL_LEQUAL);

}


}



        代码注释写的很清楚,值得一提的是在onSurfaceChanged()里

                // 设置视口的大小
                gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
                // 选择模型观察矩阵
                gl.glMatrixMode(GL10.GL_MODELVIEW);       

        顺序不能写反,否则会出问题,至于什么问题,自己试下就知道了,我也是偶然发现的

       
view plaincopy to clipboardprint?
package com.zjc.test; 
import android.app.Activity; 
import android.opengl.GLSurfaceView; 
import android.os.Bundle; 
public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
//        setContentView(R.layout.main); 
        GLReader reader=new GLReader(); 
        GLSurfaceView glview=new GLSurfaceView(this); 
        glview.setRenderer(reader); 
        setContentView(glview); 
         
    } 



        没什么好说的,基本上都是固定的,要记得 setContentView(R.layout.main)是无效的!
分享到:
评论

相关推荐

    AndroidOpenGL实战开发框架搭建、三角形和四边形的绘制.pdf

    1. `android.opengl`:这个包包含了一系列Android特有的OpenGL ES接口和类,例如`GLSurfaceView`,它是用于在Android应用中渲染OpenGL内容的视图组件。 2. `javax.microedition.khronos.egl`:这个包包含了EGL...

    用OpenGL练习作图如三角形、四边形、线段等

    在这个练习中,我们将探讨如何使用OpenGL来绘制基本形状,如三角形、四边形和线段,并实现高级功能,如形状的旋转、光照效果以及动画。C++Builder是一个集成开发环境,它支持C++编程并提供对OpenGL库的接口,使得在...

    MFC框架下OpenGL三角形,四边形,多边形建模和旋转源码

    在“MFC框架下OpenGL三角形,四边形,多边形建模和旋转源码”这个主题中,我们主要会涉及以下几个知识点: 1. **OpenGL在MFC中的集成**: 在MFC中使用OpenGL,我们需要创建一个`COpenGLCtrl`类,它是基于`CWnd`的...

    在屏幕绘制各种图形,了解Android中OpenGL的使用。

    在Android平台上,OpenGL ES(OpenGL for Embedded Systems)被广泛用于游戏开发、复杂用户界面和图形密集型应用。本主题将深入探讨如何在Android环境中利用OpenGL ES进行图形绘制。 一、Android中的OpenGL ES ...

    opengl绘制三角形并进行混合着色工程

    在"opengl绘制三角形并进行混合着色工程"中,我们主要关注的是如何使用OpenGL在Visual Studio 2013环境下构建一个工程,以及如何绘制基本图形如三角形和四边形,并应用不同的着色技术。 首先,我们需要了解OpenGL的...

    opengl 绘制四边形例子

    `triangle.cpp`和`triangle.h`文件可能包含了一个三角形绘制的基本结构,因为四边形通常由两个三角形拼接而成。在OpenGL中,基本的绘图单元是顶点,通过指定一系列顶点,然后将它们连接成多边形,比如三角形。GLSL...

    绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边形带)构成的球体

    绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边形带)构成的球体,注意球体绘制与球体划分的区别。  可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。  可以通过改变...

    图形学OpenGL中实现直线,三角形,和四边形的绘制及实现光照处理实验报告(内含伪代码或流程图、效果截图、代码 )

    OpenGL是一种强大的图形编程库,广泛应用于游戏开发、科学可视化等领域。本实验主要目的是让学生掌握OpenGL的基本使用,包括绘制基本图形(直线、三角形、四边形)以及实现光照处理。以下将详细介绍这些知识点。 ...

    windows窗口绘制三角形

    在Windows平台上,使用OpenGL进行图形绘制是一个常见的任务。本文将深入探讨如何利用OpenGL在Windows窗口中绘制三角形,这是学习图形编程的基础。 首先,我们需要理解Windows应用程序的基本结构。Windows应用程序...

    Qt_OpenGL3D图形的绘制和旋转

    如果我们要绘制一个3D的四棱锥只需要绘制这5个面即可,绘制的方法和前一篇文章OpenGL_Qt学习笔记之_03(平面图形的着色和旋转)的相同。只不过这里的顶点坐标是3维的,所以图像深度那一维不一定为0。因此我们可以事先...

    opengl作业——自由画线和广角功能(菜单鼠标键盘互动)

    在这个"OpenGL作业——自由画线和广角功能(菜单鼠标键盘互动)"中,学生通过编写OpenGL程序展示了如何实现用户交互,包括使用鼠标进行自由画线以及通过菜单选择不同的图形绘制功能。 程序的核心在于对OpenGL函数的...

    Android利用NDK绘制2D四边形

    在Android开发中,有时我们需要利用原生代码,如C++,来实现高性能或者特定功能的图形绘制,这就是Android NDK(Native Development Kit)的作用。本主题聚焦于如何使用NDK在Android平台上绘制2D四边形。NDK提供了一...

    OpenGL球体绘制与球体贴图

    OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件上生成二维和三维图像。本主题主要探讨如何使用OpenGL进行球体的绘制以及如何应用贴图技术为球体添加纹理,使得渲染出的球体更加真实。 ...

    OpenGL实现的2D多边形绘制工具

    3. **多边形绘制**:OpenGL支持多种多边形绘制,如三角形、矩形、四边形等。多边形可以通过定义一系列顶点来创建。OpenGL中的`glBegin()`和`glEnd()`函数用于标记开始和结束绘制,而`glVertex2f()`等函数用于指定每...

    电子科大UESTC_OPENGL三维图形程序设计实验_指导老师为周川

    在窗口中绘制三角形和四边形两个简单填充图形,要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。 利用三角形图元生成黑白相间的圆锥台,要求通过键盘或鼠标能够改变...

    opengl基本元素绘制

    OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件上创建二维和三维图形。本主题主要关注“opengl基本元素绘制”,即如何使用OpenGL来绘制点、线、三角形以及多边形等基本图形。 首先,...

    opengl绘制树

    这可能包括三角形或四边形,用以构建树干、树枝和树叶的基本形状。几何建模涉及将这些元素组合成一个三维模型,通过调整顶点的位置和顺序来创建复杂的形状。 2. **纹理映射**:为了让树看起来更真实,需要使用纹理...

    Opengl绘制点,线实验报告

    OpenGL 是一个跨语言、跨平台的编程接口,用于渲染2D和3D图形。这个实验主要涉及使用OpenGL在VC++环境中绘制基本的几何图元,包括点、线和面。实验的目标是熟悉OpenGL的基本程序结构,并能编写程序来绘制这些基本...

    opengl绘制花瓶演示

    OpenGL是计算机图形学中的一个重要库,用于生成2D和3D图像。在这个“opengl绘制花瓶演示”项目中,开发者使用OpenGL技术构建了一个3D花瓶模型,并且增加了阴影效果,使得展示更加逼真。这个程序允许用户从多个角度...

    OpenGL绘制一个多边形 添加颜色

    三角形和四边形添加2种不同类型的着色方法。使用Flat coloring(单调着色)给四边形涂上固定的一种颜色。使用Smooth coloring(平滑着色)将三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合。

Global site tag (gtag.js) - Google Analytics