当前位置:文档之家› ANDROID OPENGL ES 基础知识(基本概念)

ANDROID OPENGL ES 基础知识(基本概念)

ANDROID  OPENGL ES  基础知识(基本概念)
ANDROID  OPENGL ES  基础知识(基本概念)

基本概念

为了方便后边的编程,我们第一篇文章主要是介绍一些关于OpenGLES基本的概念。点

3D图像的最小单位称为点(point)或者顶点vertex。它们代表三维空间中的一个点并用来建造更复杂的物体。多边形就是由点构成,而物体是由多个多边形组成。尽管通常OpenGL支持多种多边形,但OpenGLEs只支持三边形(即三角形)所以即使我们要绘制一个正方形也要把它拆分为两个三角形绘制。先说说坐标系的问题。

默认情况下,以屏幕中心为坐标轴原点。原点左方x为负值,右边为正值。原点上方y 为正,原点下方为负。垂直屏幕向外为z正,垂直屏幕向里为z负。默认情况下,从原点到屏幕边缘为1.0f,沿各轴增加或减小的数值是以任意刻度进行的–它们不代表任何真实单位,如英尺,像素或米等。你可以选择任何对你的程序有意义的刻度(全局必须保持单位一致,不能一部分使用米,一部分使用像素)。OpenGL只是将它作为一个参照单位处理,保证它们具有相同的距离。如图:

了解了坐标轴,我们来看看怎么在坐标系中表示一个点,通常用一组浮点数来表示点。例如一个正方形的4个顶点可表示为:

1.float vertices[] ={

2.-1.0f,1.0f,.0f,//左上

3.-1.0f, -1.0f,.0f,//左下

4.1.0f, -1.0f,.0f,//右下

5.1.0f,1.0f,.0f,//右上

6.};

为了提高性能,通常还需要将浮点数组存入一个字节缓冲中。所以有了下面的操作:

1.ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length *4); //申请内存

2.vbb.order(ByteOrder.nativeOrder()); //设置字节顺序,其中ByteOrder.nativeOrder()是

获取本机字节顺序

3.FloatBuffer vertexBuffer = vbb.asFloatBuffer(); //转换为float型

4.vertexBuffer.put(vertices); //添加数据

5.vertexBuffer.position(); //设置缓冲区起始位置

OpenGLES的很多函数功能的使用状态是处于关闭的。启用和关闭这些函数可以用

glEnableClientState、glDisableClientState来完成。

1.//指定需要启用定点数组

2.gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

3.//说明启用数组的类型和字节缓冲,类型为GL_FLOAT

4.gl.glVertexPointer(3, GL10.GL_FLOAT,, vertexBuffer);

5.//不再需要时,关闭顶点数组

6.gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

多边形

多边形是由点和边构成的单闭合环。绘制多边形时需要特别注意顶点的绘制顺序,可以分为顺时针和逆时针。因为方向决定了多边形的朝向,即正面和背面。避免渲染那些被遮挡的部分可以了有效提高程序性能。默认以逆时针次序绘制顶点的构成的面是正面。

可以通过glFrontFace函数来交换“正面”和“反面”的概念。

glFrontFace(GL_CCW); //设置CCW方向为“正面”,CCW即CounterClockWise,逆时针glFrontFace(GL_CW); //设置CW方向为“正面”,CW即ClockWise,顺时针

渲染

有了以上的概念讲解后,现在要进行最主要的工作—渲染。渲染是把物体坐标所指定的图元转化成帧缓冲区中的图像。图像和顶点坐标有着密切的关系。这个关系通过绘制模式给出。常用到得绘制模式有GL_POINTS、GL_LINE_STRIP、GL_LINE_LOOP、GL_LINES、GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN。下面分别介绍:

GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制n个点。

GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n个线段,总共绘制N/2条线段。,如果N为奇数,则忽略最后一个顶点。

GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制N-1条线段。

GL_LINE_LOOP:绘制从定义第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点与第

一个顶点相连。第n和n+1个顶点定义了线段n,然后最后一个线段是由顶点N和1之间定义,总共绘制N条线段。

GL_TRIANGLES:把每三个顶点作为一个独立的三角形。顶点3n-2,3n-1和3n定义了第n个三角形,

总共绘制N/3个三角形。

GL_TRIANGLE_STRIP:绘制一组相连的三角形。对于奇数点n,顶点n,n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,总共绘制N-2个三角形。这是最常使用的渲染方式,第一个三角形条是由前三个顶点构成(索引0,1, 2)。第二个三角形条是由前一个三角形的两个顶点加上数组中的下一个顶点构成,继续直到整个数组结束。

GL_TRIANGLE_FAN:绘制一组相连的三角形。三角形是由第一个顶点及其后给定的顶点所确定。顶点1,n+1和n+2定义了第n个三角形,总共绘制N-2个三角形。

绘制图形步骤:

1.定义顶点并且转换存储在字节缓冲中;

2.我们使用顶点数组绘制图形,而opengles是默认关闭这个开关的,所以我们要启用它。gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

3.设置绘制的颜色。以下为设置红色

gl.glColor4f(1.0, 0.0, 0.0, 1.0); //R,G,B,A4.由于我们使用顶点数组,我们必须通知OpenGL 顶点的数组在什么地方。需使用函数:

gl.glVertexPointer(

3,//每个顶点的坐标的维数,这里为3xyz

GL10.GL_FIXED,//顶点坐标值的类型为GL_FIXED

0,//数组中数据的偏移值

mVertexBuffer//顶点坐标数据数组

);

5.开始绘图

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

函数原型voidglDrawArrays(int mode, int first, int count)

mode为绘制式,有GL_POINTS、GL_LINES、GL_TRIANGLES、GL_TRIANGLE_STRIP等。first 为数据在数组中的起始位置,读取数据的个数

视图与透视

我们生活在一个三维的世界——如果要观察一个物体,我们可以:

1、从不同的位置去观察它。(视图变换)

2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它。(模型变换)

3、如果把物体画下来,我们可以选择:是否需要一种“近大远小”的透视效果。另外,我们可能只希望看到物体的一部分,而不是全部(剪裁)。(投影变换)

4、我们可能希望把整个看到的图形画下来,但它只占据纸张的一部分,而不是全部。(视口变换)

这些,都可以在OpenGL中实现。

OpenGL变换实际上是通过矩阵乘法来实现。无论是移动、旋转还是缩放大小,都是通过在当前矩阵的基础上乘以一个新的矩阵来达到目的。

1、模型变换和视图变换

即设置3D模型的位移,旋转等属性。由于模型和视图的变换都通过矩阵运算来实现,在进行变换前,应先设置当前操作的矩阵为“模型视图矩阵”。设置的方法是以GL_MODELVIEW 为参数调用glMatrixMode函数,像这样:

glMatrixMode(GL_MODELVIEW);

通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。这也只需要一行代码:glLoadIdentity();

然后,就可以进行模型变换和视图变换了。进行模型和视图变换,主要涉及到三个函数:glTranslate*,(*表示这个函数分为float型的glTranslatef和int型的glTranslatex)把当前矩阵和一个表示移动物体的矩阵相乘。三个参数分别表示了在三个坐标上的位移值。glRotate*,把当前矩阵和一个表示旋转物体的矩阵相乘。物体将绕着(0,0,0)到(x,y,z)的

直线以逆时针旋转,参数angle表示旋转的角度。

glScale*,把当前矩阵和一个表示缩放物体的矩阵相乘。x,y,z分别表示在该方向上的缩放比例。

2、投影变换

投影变换就是定义一个可视空间,可视空间以外的物体不会被绘制到屏幕上。(注意,从现在起,坐标可以不再是-1.0到1.0了!)

OpenGL支持两种类型的投影变换,即透视投影和正投影。投影也是使用矩阵来实现的。如果需要操作投影矩阵,需要以GL_PROJECTION为参数调用glMatrixMode函数。glMatrixMode(GL_PROJECTION);

通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。

glLoadIdentity();

透视投影所产生的结果类似于照片,有近大远小的效果,比如在火车头内向前照一个铁轨的照片,两条铁轨似乎在远处相交了。

使用glFrustum函数可以将当前的可视空间设置为透视投影空间。其参数的意义如下图:

声明:该图片来自https://www.doczj.com/doc/289255328.html,,该图片是《OpenGL编程指南》一书的附图,由于该书的旧版(第一版,1994年)已经流传于网络,我希望没有触及到版权问题。

也可以使用更常用的gluPerspective函数。其参数的意义如下图:

声明:该图片来自https://www.doczj.com/doc/289255328.html,,该图片是《OpenGL编程指南》一书的附图,由于该书

的旧版(第一版,1994年)已经流传于网络,我希望没有触及到版权问题。

正投影相当于在无限远处观察得到的结果,它只是一种理想状态。但对于计算机来说,使用正投影有可能获得更好的运行速度。

使用glOrtho函数可以将当前的可视空间设置为正投影空间。其参数的意义如下图:

声明:该图片来自https://www.doczj.com/doc/289255328.html,,该图片是《OpenGL编程指南》一书的附图,由于该书的旧版(第一版,1994年)已经流传于网络,我希望没有触及到版权问题。

如果绘制的图形空间本身就是二维的,可以使用gluOrtho2D。他的使用类似于glOrgho。

3、视口变换

当一切工作已经就绪,只需要把像素绘制到屏幕上了。这时候还剩最后一个问题:应该把像素绘制到窗口的哪个区域呢?通常情况下,默认是完整的填充整个窗口,但我们完全可以只填充一半。(即:把整个图象填充到一半的窗口内)

声明:该图片来自https://www.doczj.com/doc/289255328.html,,该图片是《OpenGL编程指南》一书的附图,由于该书的旧版(第一版,1994年)已经流传于网络,我希望没有触及到版权问题。

使用glViewport来定义视口。其中前两个参数定义了视口的左下脚(0,0表示最左下方),后两个参数分别是宽度和高度。

追加:

想象一下你站在一个3d世界中。你的头顶上有一个朝上的箭头在跟随。然后你抬起头,看了下挂在碧天上的骄阳;低下头,看到自己的脚踏在褐色的土地上。然后转动你的头倾,看到一片片幽幽的麦地直到地平线的尽头。现在,你的眼睛就充当了摄像机。

在opengl中你总是工作在3d世界中,即使opengles也是如此。秘密是在2d引擎下,z 坐标被隐藏了。所以暂时忘记2d和3d的不同之处。如下图,用你的眼睛扫过的地方是一个金字塔形状的物体(frustum)。所有处在这个梯形中的物体都将是可视的。

此梯状物体具有6个变量:near, far, left, right, top and bottom。

?near:最近的距离,小于此距离的物体将不可见。就像是你把一张纸紧贴在眼睛上,是看不到纸上的内容一样

?far: 最远距离,大于此距离的物体也将不可见。

那么我们把3D世界转换成2D图像的这个过程,就叫做投影(projection)。典型的,有两种投影方式:正交投影(orthographic projection)和透视投影(perspective projection)

?正交投影(orthographic projection)主要用在2D世界中,它不管物体离我们多远,都一致处理,比较简单。

?透视投影是3D固定流水线的重要组成部分,用在真实的世界中。是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。

它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。

这两种视图看起来就像这样:

Android开发入门教程经典解析-JAVA语言

Android入门教程之Java核心技术阶段初级课程,从知识分类来说,可以分为三个部分来说明: (一)基础语法: 讲解Java发展史,Java环境搭建,环境变量配置,Java程序的基本结构,java和javac命令的使用,Notepad++工具的使用,语法格式,变量和常量,二进制转换,运算符、表达式,分支结构和循环结构语句,数组与多维数组,冒泡排序,二分查找,随机生成一组不重复的数算法,通过模拟一个双色球案例,把基础语法容融会贯通,打下扎实的基础。 (二)面向对象: 讲解Java中的OOP/OOD/OOA的知识,深入讲解OOP的封装、继承、多态、抽象的概念与实际应用,涉及内容为类与对象的定义和关系,封装分别在Java EE开发和Android开发中的不同,对象的引用传递,对象的内存分配和GC,构造方法和匿名对象,如何开发和定义一个类,深入讲解String类的原代码原理内部实现、特性和内存管理,通过四种字符串连接时的场景分析来深入理解Java编译期和运行期的区别,String的相关操作方法;static 关键字,构造方法私有化,对象数组与动态数组的实现原理,链表数据结构,内部类及优缺点,在EE开发和Android开发的区别和经验;继承的思想,方法重写与重载,super关键字,抽象类、接口和多态的思想,以及真实环境中的应用,Object类,包装类与特性,包与修饰符;课程贯彻的设计模式有:单例模式、工厂模式、策略模式、适配器模式、模板方法模式、代理模式。以及OO设计中的六大原则。通过本节课程你可以彻底理解什么是面向对象编程,加以时日练习,必成大器。 (三)Eclipse与异常处理 异常的基本处理格式和5大关键字的联合使用,Java中异常处理的新特性,自定义异常类,编译时异常与运行时异常的区别,JVM对异常的处理过程,经过前两节课程共两周多的Notepad++写代码,已经达到了纯手写代码的目的,本节课程开始引入了99.9%的程序员都在使用的集成开发环境Eclipse,他对异常调试的强大支持,会让你叹为观止,当然Eclipse 不仅仅只有这些,在这里,你将一一学到。 Android入门教程之Java核心技术阶段中级课程,Java基础、面向对象、Java高级开发,讲解以下内容: (一)常用类库API与算法 讲解StringBuffer类的内部原理,分析原代码实现,与String的区别与应用经验,如何实现国际化程序,日期操作API,Comparable的两种实现,对象克隆,Arrays工具类、Math 工具类、Random类的使用,选择排序算法和二叉树数据结构实现,通过本节课程,你将学到常用类库API和工作中最最常见的排序算法和二叉树,本节过后,你的功力又增强了。 (二)IO与New IO

Android开发的核心知识

想要学习移动应用的开发,除了必备的知识要掌握好之外,更多的是要掌握一些核心的基础知识,并且是能够起到关键性作用的知识点,必须是要了解清楚,如果你也是在学习Android开发,下面的核心基础或者对你有一定的帮助! 1.ListView的引入 为什么要采用listview?其实是在数据量过于庞大时,传统的存储方式它是会占用机器大量内存,最终导致OOM异常(内存溢出),listview的出现将会是有效的解决这个弊端的出现。 重点来了listview如何使用呢? res/layout布局文件中定义listview src的java代码里面关心控件findviewbyid(R.id.listview); 创建适配器对象,适配器继承baseAdapter接口 2.构造方法 getCount();控制listview的条目数 getView();得到当前条目视图 View.inflate();布局填充器 设置适配器:setAdapter(adapter); 设置listview列表项的点击事件:setOnClickLinsstener();

通知listview更新数据:adapter.notifyDataSetChanged(); 3.对话框的使用 *普通对话框 *单选对话框 *多选对话框 *进度对话框 *进度条对话框 *自定义对话框 布局填充器:Viewview=View.inflate(Context,https://www.doczj.com/doc/289255328.html,yout.dialog,null); 核心API:dialog.setView(view); 4.常见的一些适配器的使用 *数组适配器:ArrayAdapter *简单适配器:SimpleAdapter 5.数据库的常见的事务 为什么需要需要定义数据库事务?最主要的还是为了保证多条操作语句同步执行 6.数据库事务执行流程 db.beginTransaction();开启事务 db.setTransactionSuccessful();设置事务执行成功 db.endTransaction();结束事务 7.样式和主题 样式的作用在单独的UI控件上面 主题的作用它是在activity或者application上 以上的这些功能控件、数据库等这些是开发中必备的功能,在开发中只要这些基本的核心知识都掌握了,那么这对你接下里的进一步开发是比较有帮助的。

计算机组成原理期末考试2013级试题答案

考试科目名称 计算机系统基础 (A 卷) 2014—2015学年第 1 学期 教师 袁春风 路通 苏丰 唐杰 汪亮 考试方式:开卷 系(专业) 计算机科学与技术 年级 2013 班级 学号 姓名 成绩 题号 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 分数 一个C 语言程序有两个源文件:main.c 和test.c ,它们的内容如下图所示。 假设在IA-32/Linux 平台上用GCC 编译驱动程序处理,main.c 和test.c 的可重定位目标文件名分别是main.o 和test.o ,生成的可执行文件名为test 。回答下列问题或完成下列任务。 ( 提示:IA-32为小端方式,字长为32位,即sizeof(int)=4,虚拟地址空间中的只读数据和代码段、可读写数据段都按4KB 边界对齐) 一、从C 语言源程序到可执行文件test 的转换需要经过哪些步骤?简要说明每个步骤的工作内容。(4分) 参考答案: (略) 二、已知数组a 在虚拟空间中首址为0x080496dc ,则0x080496e0到0x080496e3这4个单元内容依次是 什么?若a 改为float 型(即main.c 第4行的int 改为float ),则这4个单元内容依次是什么?(6分) 参考答案: 在0x080496e0到0x080496e3这4个单元中存放的是-100,-100=-(64+32+4)=-1100100B ,其对应的 8位补码表示为10011100,在机器中的32位补码表示为FFFFFF9CH 。因为IA-32是小端方式,因此,在0x080496e0到0x080496e3这4个单元的内容依次为:9CH 、FFH 、FFH 、FFH 。(2分) 若a 改为float 类型,则-100用IEEE 754单精度格式表示,因为-1100100B=-1.1001B 26,因此其机器数为1 10000101 100 1000 0000 0000 0000 0000,用十六进制表示为C2C80000H ,因此,在0x080496e0到0x080496e3这4个单元的内容依次为:00H 、00H 、C8H 、C2H 。(4分) /* test.c */ 1 extern int a[]; 2 #define N 4 3 int val=0; 4 int sum() 5 { 6 int i; 7 for (i=0; i 2 3 int sum(); 4 int a[4]={-1,-100,2, 3}; 5 extern int val; 6 void main( ) 7 { 8 val=sum(); 9 printf(“sum=%d\n ”,val); 10 }

Android应用开发基本知识点汇总

Android应用开发基本知识点汇总 Activity 一生命周期 4种状态 running / paused / stopped / killed 生命周期 Activity启动 onCreate -> onStart -> onResume 点Home返回主界面 onPause -> onStop 再次回到原Activity onRestart -> onStart -> onResume 退出Activity onPause -> onStop -> onDestroy 进程优先级前台/可见/服务/后台/空 二任务栈 三启动模式 standard singleTop 栈顶复用 singleTask 栈内复用 singeInstance 四scheme跳转协议 服务器可以定制化告诉App跳转哪个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面 Fragment 一第五大组件 为什么是第五大组件 Fragment相对Activity更节省内存,切换更舒适Fragment加载到Activity的两种方式 静态加载xml 动态加载fragmentTransaction.add(id, fragment, “name”); .commit; FragmentPagerAdapter与FragmentStatePagerAdapter

FragmentStatePagerAdapter在切换时回收内存,适合页面较多的情况FragmentPagerAdapter并没有回收内存,只是detach了Activity 二生命周期 onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onStart -> onResume -> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach 先创建Activity后创建Fragment,先销毁Fragment后销毁Activity 三Fragment之间的通信 Fragment调用Activity getActivity Activity调用Fragment 接口回调 Fragment调用Fragment方法findFragmentById 四FragmentManager replace add remove Service 一应用场景,与Thread区别 Service是什么后台长时间运行,没有用户界面,运行在主线程,不能有耗时操作 Service与Thread区别 Activity难以与Thread交互,尤其当Activity销毁以后 二开启Service的两种方式 StartService onCreate -> onStartCommand -> onBind -> onDestroy onStartCommand return START_STICKY;

Android手机分辨率基础知识(DPI_DIP计算)

比如:计算WVGA(800*480)分辨率,3.7英寸的密度DPI

图1 Diagonal pixel 表示对角线的像素值(=),DPI=933/3.7=252 3.手机屏幕的分类 3.1根据手机屏幕密度(DPI)或屏幕尺寸大小分为以下3类,如图2所示 图2 3. 2手机屏幕分类和像素密度的对应关系如表1所示:

图3 从以上的屏幕尺寸分布情况上看,其实手机只要考虑3-4.5寸之间密度为1和1.5的手机4 UI设计 从开发角度讲,应用程序会根据3类A ndroid手机屏幕提供3套UI布局文件,但是相应界面图标也需要提供3套,如表2所示

需要根据物理尺寸的大小准备5套布局,layout(放一些通用布局xml文件,比如界面中顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),layout- small(屏幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之间),layout-xlarge(7-10英寸之间) 2)图片资源方面 需要根据dpi值准备5套图片资源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi Android有个自动匹配机制去选择对应的布局和图片资源 分享到:?上一篇:分享摩托罗拉milestone手机升级到Android 2.2的过程 ?下一篇:基于feng streaming server 搭建Android直播测试平台 查看评论 7楼pc0de 2011-12-16 17:11发表[回复] 谢谢分享啊 6楼yang_hui198**** ****-11-19 16:44发表[回复] 很强大!!!很喜欢!!! 3楼noICE1 2011-08-16 14:59发表[回复]

计算机系统基础试卷

《计算机系统基础》试卷 (编号:A ) 注意事项: 1.本试卷适用于2018级软件工程专业学生使用。 2.本试卷共8页,满分100分,答题时间90分钟。 3.考试采用开卷形式。 题号 一 二 三 四 总分 得分 得分 评卷人 一、单项选择题(在每小题给出的4个选项中,只有一项是正确的, 将正确选项的字母标号填写在“单项选择题答题表”相应题号下的 空格中。本大题共10道小题,每小题1分,共10分) 单项选择题答题表 题号 1 2 3 4 5 6 7 8 9 10 答案 1. 108对应的十六进制形式是(__)。 A .5CH B .63H C .6CH D .B4H 2. C 语言程序段:short si=–8196; unsigned short usi=si; 运行后,usi 的值是(__)。 A .57339 B .57340 C .8196 D .34572 3. 采用IEEE 754单精度浮点数格式表示–1028的结果(十六进制)是(__)。 A .44808000H B .C4C04000H C .C4808000H D .44C04000H 4. 若已知int i=12345, float f=1.2345e3,则在一个32位机器中执行下列表达式时,结 果为“假”的是(__)。 A .f==(float)(int)f B .f==(float)(double)f C .i==(int)(double)i D .i==(int)(float)i 装 订 线 班级: 姓名: 学号:

5.假定某计算机按字节采用小端方式编址,一个float型变量x的地址为0xffffc000, x=12345678H,则在内存单元0xffffc001中存放的二进制串是(__)。 A.01010110B B.0001001000110100B C.0101B D.00110100B 6.假设变量x的位数为n(n>=8),使得x的最高有效字节不变,其余各位全变为0的 C语言表达式为(__)。 A.((x&0xFF)<<(n-8))>>(n-8) B.((x&0xFF)>>(n-8))<<(n-8) C.(x>>(n-8))<<(n-8) D.(x<<(n-8))>>(n-8) 7.若在一个8位计算机中完成x+2y的运算,假定变量x和y的机器数用补码表示为 [x]补=44H,[y]补= DCH,则x+2y的机器数及相应的溢出标志OF分别是(__)。 A.32H、1 B.FCH、1 C.FCH、0 D.32H、0 8.对于IEEE 754单精度浮点数加减运算,只要对阶时得到的两个阶之差的绝对值|ΔE| 大于等于(__),就无需继续进行后续处理,此时,运算结果直接取阶大的那个数。 A.25 B.128 C.127 D.23 9.假设R[eax]=0000B160H,R[ebx]=00FF0110H,执行指令“imulw %bx”后,通用寄存 器的内容变化情况为(__)。 A.R[eax]=FFAC7600H,其余不变 B.R[eax]=00007600H,R[dx]=FFACH C.R[eax]=00BC7600,其余不变 D.R[eax]=00007600H,R[dx]=00BCH 10.假定全局数组a的声明为char *a[8],a的首地址为0x80498c0,i 在ECX中,现要将a[i]取到EAX相应宽度的寄存器中,则所用的汇编指令是()。 A.mov 0x80498c0( , %ecx), %ah B.mov (0x80498c0, %ecx), %ah C.mov 0x80498c0( , %ecx, 4), %eax D.mov (0x80498c0, %ecx, 4), %eax

Android应用开发基础习题集

任务一 Android开发环境的搭建 第一部分知识回顾与思考 1.Android的四层架构分别包括哪几层分别起到什么作用 答:Linux内核层(Linux Kernel):基于Linux内核,内核为上层系统提供了系统服务。 系统库层(Libraries):系统库基于C/C++语言实现,通过接口向应用程序框架层提供编程接口。 应用框架层(Application Framework):为开发者提供了一系列的Java API,包括图形用户界面组件View、SQLite数据库相关的API、Service组件等。 应用程序层(Applications):包含了Android平台中各式各样的应用程序。 第二部分职业能力训练 一、单项选择题(下列答案中有一项是正确的,将正确答案填入括号内) 1.Android四层架构中,应用框架层使用的是什么语法( C ) A.C B.C++ C.Java D.Android 2.Android四层架构中,系统库层使用的是什么语法( B ) A.VB B.C /C++ C.Java D.Android 3.应用程序员编写的Android应用程序,主要是调用( B )提供的接口进行实现。 A.应用程序层 B.应用框架层 C.应用视图层 D.系统库层 二、填空题(请在括号内填空) 1.在Android智能终端中,有很多应用如拍照软件、联系人管理软件,它们都属于Android的(应用程序)层。 2.为了让程序员更加方便的运行调试程序,Android提供了(模拟器),可以方便的将程序运行其上,而不要实际的移动终端。 3.为了支持Java程序运行,我们需要安装(JDK)。 三、简答题 1.简述Android开发环境安装的步骤。 答:下载并安装JDK,配置JDK的环境变量; 从Anroid官网上下载Android开发组件(包含Eclipse和Android SDK、ADT); 安装Android开发环境(包括配置Android SDK的环境变量、打开Eclipse通过菜单设定Android SDK 路径)。 2.简述Android应用程序创建和运行的步骤。 答:通过菜单创建Android应用程序,设置应用程序名、Android版本等基本信息。

计算机系统基础试题

第一部分计算机系统基础 一、选择题 【1】计算机最主要的工作特点是 A) 高速度 B) 高精度 C) 存记忆能力★D) 存储程序与自动控制 【2】目前微型计算机中采用的逻辑元件是 A) 小规模集成电路B) 中规模集成电路 ★C) 大规模和超大规模集成电路D) 分立元件 【3】下列四条叙述中,有错误的一条是 A) 两个或两个以上的系统交换信息的能力称为兼容性 B) 当软件所处环境(硬件/支持软件)发生变化时,这个软件还能发挥原有的功能,则称该软件为兼容软件 C)不需调整或仅需少量调整即可用于多种系统的硬件部件,称为兼容硬件 ★D) 著名计算机厂家生产的计算机称为兼容机 【4】下列四条叙述中,有错误的一条是 A) 以科学技术领域中的问题为主的数值计算称为科学计算 B) 计算机应用可分为数值应用和非数值应用两类 C) 计算机各部件之间有两股信息流,即数据流和控制流 ★D) 对信息(即各种形式的数据)进行收集*、储存*、加工与传输等一系列活动的总称为实时控制 【5】软件与程序的区别是 A) 程序价格便宜、软件价格昂贵 B) 程序是用户自己编写的,而软件是由厂家提供的 C) 程序是用高级语言编写的,而软件是由机器语言编写的 ★D) 软件是程序以及开发*、使用和维护所需要的所有文档的总称,而程序是软件的一部分 【6】某单位自行开发的工资管理系统,按计算机应用的类型划分,它属于 A) 科学计算 B)辅助设计★C)数据处理 D)实时控制 【7】微型计算机中使用数据库管理系统,属下列计算机应用中的哪一种? A) 人工智能 B) 专家系统★C) 信息管理 D) 科学计算 【8】英文缩写CAD的中文意思是 A) 计算机辅助教学 B) 计算机辅助制造★C) 计算机辅助设计 D) 计算机辅助测试 【9】目前计算机应用最广泛的领域是 A) 人工智能和专家系统B) 科学技术与工程计算 ★ C) 数据处理与办公自动化D) 辅助设计与辅助制造 【10】联想"奔腾三代"计算机所采用的主要电子元器件是() A、电子管 B、晶体管 C、集成电路★D*、大规模集成电路 【11】能对二进制数据进行移位和比较操作的计算机工作部件是() A、累加器★B*、运算器 C、控制器 D、寄存器 【12】CD-ROM 常作为多媒体套件中的外存储器,它是() A、只读存储器★B*、只读光盘 C、只读硬盘 D、只读大容量软盘 【13】微型计算机的性能主要取决于() A、内存★B*、中央处理器 C、硬盘 D、显示卡 【14】在学校里,能用于打印蜡纸的打印机是() A、激光打印机★B*、针式打印机 C、喷墨打印机 D、热敏式打印机 【15】在微机系统中,最基本的输入输出模BIOS存放在() A、RAM中★B*、ROM中 C、硬盘中 D、寄存器中 【16】IBM PC/AT 微型机采用的CPU芯片是() A、Z-80 B、8086 C、8088 ★D*、80286 【17】486DX2/80 中的数字486代表(),数字80代表()。 ★A*、CPU的型号★B*、CPU的主频 C、存储的容量 D、存取速度 【18】计算机中能统一指挥和控制计算机各部分调动、连续、协调一致运行的部件是() A、运算器 B、存储器 C、显示器★D*、控制器 【19】运算器主要用于() A、四则运算 B、逻辑断 C、传送数据★D*、算术运算和逻辑运算 【20】指令系统中采用多种不同寻址方式的主要目的是() A、实现存储程序和程序控制 ★B*、缩短指令长度,扩大寻址空间,提高编程的灵活性 C、可以直接访问外存储器 D、提供扩展操作码的可能性,降低指令译码的难度 【21】在CPU中,指令寄存器的作用是(),程序计数器的作用是() A、用来存放后续指令地址 ★B*、保存当前正在执行的一条指令 ★C*、保存将被存储的下一个数据字节的地址 D、保存当前CPU所访问的主存单元的地址 【22】最先实现程序存储的计算机是() A、ENIAC ★B*、EDSAC C、EDVAC D、UNIVA 【23】计算机中根据()访问内存。 A、存储内容★B*、存储地址 C、存储单元 D、存储容量 【24】内存储器存储容量的大小取决于() A、字长 B、地址总线的宽度★C*、数据总线的宽度 D、字节数 【25】在内存()中存放一个字符。 A、一个字 B、一个字长★C*、一个字节存储单元 D、一个字存储单元 【26】以下不属于计算机外存储器的是() A、磁带 B、硬盘 C、软盘★D*、RAM 【27】内存与外存比较具有()优点。 A、存储容量大★B*、存取速度快 C、价格低 D、盘上信息可以长期脱机保存 【28】软盘与硬盘比较具有()优点。 ★A*、便于随身携带 B、存储容量大 C、使用寿命大 D、存取速度快 【29】设一软磁盘有300KB字节可用的空间,若使用ASCⅡ码存盘,则可用存储英文字符为( B)字,或存储汉字(C )个。

复习材料《Android移动应用开发技术》

1、关于android进程,说法不正确的是( B ) A、组件运行所在的进程,是由androidManifest.xml决定,它可以指定该组件运行于哪个进程。 B、背景进程是不为用户所见的Activity,但是还会有可能被用户看到,所以它不能被杀死 C、当急需内存时,android会决定优先关闭那些空闲的进程 D、可视进程一般不会不被系统所杀死 2、Matrix类的作用( A ) A、可以存储缩小或放大比列 B、存储文件中的图片信息 C、存储资源中的图片信息 D、存储内存中的图片信息 3、关于主题的说法,错误的是( D ) A、它是属性集合 B、它可以在程序中来设置 C、它通常用于一个Activity或所有Activity上 D、它可以用于单个TextView上 4、setOnTouchEvent 设置返回值为true 和 false有何区别?以下说法较准确是( C ) A、没有区别,都能对事件进行监听 B、设置为true时只能在移动时获得一次监听事件,false则可以多次 C、设置为false是,在处理一次监听事件后,系统将抛弃该次事件 D、返回true表示这个消息已经被处理结束,后续的handler不再接收到这个消息 二、开发技术设计与应用能力部分 注:以下程序均是相关程序或小项目的实现代码,根据每个程序或项目的特性,完成程序空缺部分的内容,使其实现。具体程序代码注释省略。 图1 图2 图3 图4 1)电话实现[主界面如图1] 程序描述:完成手机打电话功能。 public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/289255328.html,yout.activity_main); Button btn_call = (Button)this.findViewById(R.id.btn_call); btn_call.setOnClickListener(new btnCall()); } private class btnCall implements OnClickListener (1) { public void onClick(View v) { // TODO Auto-generated method stub EditText et_number = (EditText) MainActivity.this.findViewById(R.id.et_number); String s_number = et_number.getText().toString().trim(); (2) Intent i_call = new Intent(); i_call.setAction(Intent.ACTION_CALL(3)); i_call.setData(Uri.parse("tel:"+s_number)); startActivity(i_call); (4) } } } 2)动画实现[主界面如图2] 程序描述:手机屏幕触摸后演示动画,假设XML文件已经设置好,id资源为:R.drawable.panda public class MainActivity extends Activity { ImageView iv_action; AnimationDrawable ad_action; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/289255328.html,yout.activity_main); iv_action = (ImageView)this.findViewById(R.id.iv_action); iv_action.setBackgroundResource(5)(R.drawable.panda); ad_action = (AnimationDrawable) iv_action.getBackground(); } public boolean onTouchEvent(MotionEvent event) { ad_action.start();(6) return super.onTouchEvent(event); } } 3)撕衣服游戏实现 项目描述:划动屏幕时完成撕衣服效果,并产生撕衣服声音(sound.mp3) public class MainActivity extends Activity { ImageView iv_upper; ImageView iv_below;

[1 总体说明] 程序设计基础及计算机系统基础课程实训(student)

《程序设计基础》及《计算机系统基础》 课程实训说明书 起草人:陈旭东时间:2011-11-14 定稿:赵宏马迪芳魏小涛孔令波陈旭东 1.实训目标 (1)综合应用程序设计知识解决实际问题。 (2)学会应用模块化的程序设计思路、自顶向下的程序设计方法、增量开发模型来解决实际问题。 (3)学会应用C语言和相关的IDE独立进行程序实现、调试。 (4)学会将业务逻辑和用户菜单相分离。 (5)学会按照工程化思路组织文档。 (6)通过PPT组织与讲解,锻炼沟通展示能力。 2.实训条件 (1)硬件:每人一台计算机或者笔记本电脑。 (2)软件:Windows XP/Windows 7 , C/C++ IDE (3)场地:软件工程实验中心 3.实训内容 课程实训基本任务是要求遵守软件开发过程的基本规范,运用结构化程序设计的基本方法,按照课程实训的基本要求,分析、设计、编写、调试和测试C 程序及编写课程实训报告。 具体要求为: (1)在所给题目中任选一题 (2)17周结课前完成 (3)提交课程实训文档 第1题学生证管理程序 题目描述: 设计一个学生证的管理程序。该程序应该具有以下功能: (1)录入某位学生的学生证信息(学生证应该包含的信息请参看自己的学生证); (2)给定学号,显示某位学生的学生证信息;

(3)给定某个班级的班号,显示该班所有学生的学生证信息; (4)给定某位学生的学号,修改该学生的学生证信息; (5)给定某位学生的学号,删除该学生的学生证信息; (6)提供一些统计各类信息的功能。 题目要求: (1)按照分析,设计,编码,调试和测试的软件开发过程完成这个应用程序; (2)学生证应该包含的信息请参看自己的学生证; (3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。 输入要求: 应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。 输出要求: (1)应用程序运行后,要在屏幕上显示一个菜单; (2)要求用户输入数据时,要给出清晰,明确地提示信息,包括输入的数据内容,格式及结束方式等。 提示: 设计一个结构类型和一维数组类型,用来保存学生证的内容。 扩展功能: 将所有的学生证信息存储在一个文件中,并实现文件读写的操作。 第2题学分管理系统 题目描述: 设计一个学生的学分管理程序。 假设每位学生必须完成基础课50学分,专业课50学分,选修课24学分,人文类课程8学分和实验性课程20学分才能够毕业。因此在管理学分时,要考虑每个学分所属的课程类别。 该程序应该具有以下功能: (1)录入某位学生的学分; (2)给定学号,显示某位学生的学分完成情况; (3)给定某个班级的班号,显示该班所有学生的学分完成情况; (4)给定某位学生的学号,修改该学生的学分信息; (5)按照某类课程的学分高低进行排序; (6)提供一些统计各类信息的功能。 题目要求:

ANDROID实训心得体会

项目总结 时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我 们学到的不仅仅是课内还有课外,实训让我们的课内知识得到了巩固,专业知识、编程水平 都有很大的提高,我们非常感谢这次实训。 刚开始二周的高强度的课程安排让我们受益匪浅;接下来的项目实训又让我们可以巩固 了课程。这让我觉得实习生活充实而有意义。 乐淘购物项目和android优化大师,我更好的学习了ui的设计,如何使界面漂亮,美观, 巩固了listview,gridview,的使用,学会了动画进入界面的,和会移动的画廊等等。在这 两个项目中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完 成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获 取成功,一种自信心由然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人的身上 真得能学习到不自己没有的东西,每一次的挫折只能使我更接近成功。 音乐播放器项目,我们是七个人组成小组完成的,由组长带领我们,分配任务,每个人, 都发挥自己的长处,更好地去完成任务。对于团队开发来说,团结一致使我深有体会。团队 的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具 体实践中,不仅加深我对理论的掌握和 运用,还让我拥有了一次又一次难忘的开发经历,这是也是实训最大的收获。 这次实训对于我以后学习、找工作也真是受益菲浅,在这3个月中让我初步从理性回到 感性的重新认识,也让我初步的认识这个社会,对于以后做人所应把握的方向也有所启发! 相信这些宝贵的经验会成为我今后成功的重要的基石。在此,我非常感谢指导老师和 同学对我的帮助。篇二:android实训报告 通信与电子信息专业实训报告 项目名称:基于android的游戏开发 班级 10通信1班 姓名 学号 指导教师 成绩 实训时间:年月日— 目录 一、实训目的及其意义 (3) 1.1、目的及意义 (3) 1.2、研究现状 (3) 二、实训主要任务、重点及难点 (4) 2.1、任务 (4) 2.2、重点内容及实现途径 (4) 三、实训具体内容及完成的主要工作 (5) 3.1、认识基础开发 (6) 3.2、了解数据存储 (6) 3.3、总体实训过程 (7) 四、实际遇到的困难,解决问题的方法和措施 (8) (一)、所遇问题 (8) (二)、解决方法与措施 (9) 五、心得体会 (9)

Android期末复习题总结

1、Intent的Component属性的作用是什么,如何定义此属性? component(组件),指定Intent的的目标组件的类名称。通常Android会根据Intent 中 包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹 配的目标组件。但是,如果component这个属性有指定的话,将直接使用它指定的组件, 而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。Component属性的作用是用来指定Intent的目标组件的类名称。如果Component这个属性被指定了的话,Intent的其它属性都是可选项,Android 会直接使用Component指定目标组件,而不再执行其它查找过程。 在使用时,需要先创建一个ComponentName对象,然后将它设置成Intent对 象的Component的属性。通过setComponent()、setClass()和setClassName() 三种方法都可以设置组件的名称,通过getComponent()方法则可获得设置项。 2、发送广播时,可以通过sendCatagoryBroadcast()方法将Intent对象发送出去( ). (错) 3、Android是什么?( ) 一种操作系统 4、下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是( ) DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。 5、Android操作系统最早由哪个公司研发?( ) Android公司 6、下列中不属于手持设备的是( ) 机顶盒 7、下列不是手机操作系统的是()。Windows Vista 8、到目前为止,Android操作系统的最高版本是哪个?( )Android L 9、安装Android SDK时,可以通过( )在线安装或离线安装。Android sdk manager 10、开发Android应用程序时,一般使用的计算机语言是( ) 。JAVA 11、E/AndroidRuntime(1099): https://www.doczj.com/doc/289255328.html,ng.RuntimeException: Unable to instantiate activity ComponentInfo{com.test/com.test.CanvasActivitys}: https://www.doczj.com/doc/289255328.html,ng.ClassNotFoundException: com.test.CanvasActivitys in loader dalvik.system.PathClassLoader[/data/app/com.test-1.apk] 这段话是程序报错在LogCat中产生的记录,从中可以分析问题的原因可能在哪里?( ) CanvasActivitys类没有在AndroidManifest中正确申明 12、对于直接Intent,Android不需要去做解析,因为目标组件已经很明确,Android 需要解析的是那些间接Intent,通过解析,将Intent映射给可以处理此Intent的Activity、IntentReceiver或Service (对) Intent 可以传递View对象(错) Intent起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被 调用者之间的解耦(对) 通过Intent可以删除程序(对) 13、下面退出Activity错误的方法是()。System.exit( ) 14、当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行 的回调函数是( )。startActivityResult() 15、这是一个资源配置文件,下面描述正确的是? ( )这个shape文件是画一条虚线,实 线段5dp,间隔3dp 16、Toast toast = new Toast(this); toast.setText("今天天气不错\n哈哈"); toast.show(); 上面代码的执行结果是什么( )。代码会抛出异常,因为new出的Toast对象不能再使用setText方法来设置提示框文本

ANDROID OPENGL ES 基础知识(基本概念)

基本概念 为了方便后边的编程,我们第一篇文章主要是介绍一些关于OpenGLES基本的概念。点 3D图像的最小单位称为点(point)或者顶点vertex。它们代表三维空间中的一个点并用来建造更复杂的物体。多边形就是由点构成,而物体是由多个多边形组成。尽管通常OpenGL支持多种多边形,但OpenGLEs只支持三边形(即三角形)所以即使我们要绘制一个正方形也要把它拆分为两个三角形绘制。先说说坐标系的问题。 默认情况下,以屏幕中心为坐标轴原点。原点左方x为负值,右边为正值。原点上方y 为正,原点下方为负。垂直屏幕向外为z正,垂直屏幕向里为z负。默认情况下,从原点到屏幕边缘为1.0f,沿各轴增加或减小的数值是以任意刻度进行的–它们不代表任何真实单位,如英尺,像素或米等。你可以选择任何对你的程序有意义的刻度(全局必须保持单位一致,不能一部分使用米,一部分使用像素)。OpenGL只是将它作为一个参照单位处理,保证它们具有相同的距离。如图:

了解了坐标轴,我们来看看怎么在坐标系中表示一个点,通常用一组浮点数来表示点。例如一个正方形的4个顶点可表示为: 1.float vertices[] ={ 2.-1.0f,1.0f,.0f,//左上 3.-1.0f, -1.0f,.0f,//左下 4.1.0f, -1.0f,.0f,//右下 5.1.0f,1.0f,.0f,//右上 6.}; 为了提高性能,通常还需要将浮点数组存入一个字节缓冲中。所以有了下面的操作: 1.ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length *4); //申请内存 2.vbb.order(ByteOrder.nativeOrder()); //设置字节顺序,其中ByteOrder.nativeOrder()是 获取本机字节顺序 3.FloatBuffer vertexBuffer = vbb.asFloatBuffer(); //转换为float型

汕头大学计算机组织原理期末复习资料

计算机组织与原理期中期末复习(杰哥班) 01讲 一:名词解释 ACM Association for Computing Machinery 美国计算机协会 ENIAC Electronic Numerical Integrator And Computer 电子数字积分计算机 ALU Arithmetic and Logical Unit 算数逻辑部件 CP Clock Pluse 时钟 ISA Instruction Set Architecture 指令集体系结构(指令集架构)LSIC Large Scale Integrated Circuits 大规模集成电路 MOOC Massive Open Online Courses 大型开放式网络课程 PC Person Computer/Program Counter 个人电脑/程序计数器 PLC Programmable Logic Controller 可编程逻辑控制器 二:问题解答 计算机系统是? 计算机系统=硬件/固件+软件 固件是什么? 1.固化的程序(firmware),例如计算机主板上的BIOS。 2.固件一般存储于设备中的电可擦除只读存储器EEPROM(Electrically Erasable Programmable ROM)或FLASH芯片中,一般可由用户通过特定的刷新程序进行升级的程序。 3.固件常见于:手机、数码相机、mp3、mp4、路由器、交换机、U盘、主板的BIOS(BIOS就是一 种固件)、显卡的BIOS。 什么是“软件摩尔定律”? 软件摩尔定律:每18个月,软件体积大一倍,效率差一半。 冯·诺依曼体系和哈佛总线体系的区别? 冯·诺依曼体系和哈佛总线体系的区别:程序空间和数据空间是否是一体的。冯·诺依曼结构数据空间和地址空间不分开,哈佛结构数据空间和地址空间是分开的。 X86属于冯·诺依曼体系结构;ARM9属于哈佛结构。 冯.诺依曼计算机体系的主要特点? 1. 计算机由运算器、控制器、存储器、输入设备和输出设备五部分组成; 2. 采用存储程序的方式; 3. 数据以2进制表示。 计算机系统结构概念的实质? ?计算机组成:计算机系统结构的逻辑实现 —包含物理机器级中的数据流和控制流的组成以及逻辑设计等。 —着眼于:物理机器级内各事件的排序方式与控制方式、各部件的功能以及各部件之间的联系。 ?计算机实现:计算机组成的物理实现 —包括处理机、主存等部件的物理结构,器件的集成度和速度,模块、插件、底板的划分与连接,信号传输,电源、冷却及整机装配技术等。 —着眼于:器件技术(起主导作用)、微组装技术。

相关主题
文本预览
相关文档 最新文档