<2014 05 14> Android平台下2D/3D开发攻略
2014-05-14 16:57
316 查看
Android通过OpenGL包含了对高性能2D和3D图形的支持,尤其支持OpenGLES API。OpenGL是一个跨平台的图形API,提供了软件操作3D图形硬件的接口。OpenGLES是一个专用于嵌入式设备的OpenGL规格.从android1.0开始支持OpenGLES 1.0和1.1API规格。从Android2.2 (API Level 8)开始,框架支持OpenGLES 2.0 API规格。
Android框架所提供的API与(JAVA)J2MEJSR239 OpenGL ES API非常相似,但并不是完全相同。如果你熟悉J2MEJSR239规格,请注意不同的地方。
Android的框架API和NDK都支持OpenGL.本主题面向Android框架接口.关于NDK的更多信息,请观NDK开发文档.
===========================================================================================
目前,在Linux操作系统中,一般可将图形应用库粗略地分为三个不同层次:
第一层次是图形基础设施,它们本身没有提供相应的应用程序编程接口,而是集成在操作系统中或采用某种封装形式,用作其他高级图形或者应用程序的基本函数库,较典型的有X Window、SVGALib、framebuffer(帧缓冲)和LibGGI等;
第二层次是高级函数库,它们提供了大量的应用程序编程接口,较典型的有Xlib、GDK、GTK+、QT、SDL、OpenGL、PEG和DirectFB等;
第三层次多任务窗口系统图形用户界面GUI,较典型的有 Microwindows、OpenGUI、Qt/Embedded和MiniGUI等。
X11,GTK,QT,GNOME
X11是X Window System Protocol, Version 11(RFC1013),是X server和X client之间的通信协议。X server是xfree86/xorg驱动下的显示设备鼠标键盘统称,X client通过X11协议和xfree86/xorg实现的X server通信,比如,告诉它画一个左上角坐标为(x,y),宽为w,高为h的窗口,xfree86就让显示器把屏幕上的小灯(像素)打亮,然后你就看到了一个窗口。
为了方便开发人员编写X clients,就有了Xlib来封装协议;Xlib不够方便,于是就有了qt和gtk,提供了很多窗口控件(widgets)。
为了方便用户,就出现了gnome和kde等桌面管理系统。一般来说,linux用户看到的界面就是其中之一了。gnome用的是gtk库,kde用的是qt库。
但毫无疑问, GTK, QT也应该可以画点, 画线, 但他们设计的目的本来就在于图形界面的开发, 他们是图形系统中更高层次的抽象, 比方来说, GTK+从2.8起由Cairo来实现其组件的绘制, 而Cairo正和OpenGL一样, 是更低层次的图形库。
OpengGL
OpengGL 只是定义了一组接口, 具体的实现一般由各显卡厂商提供(Nvidia, ATI,...),也因此能更好的利用硬件的性能, 所以,我们可以看到OpenGL-compatible这样标注的显卡。 这也从一个侧面反应了opengl的底层性。仅以画点, 线,面来说,当性能要求高时, 应当考虑opengl。 一般的桌面应用Gtk应该够了。
我注意到GNU Xaos(一个分形演示软件)用的是libx11-dev来做图形绘制, 那么, libx11和gtk又有什么联系?
拜读了X Window System Architecture Overview HOWTO以后, 我才明白这之间的关系: X window System(X11, Xlib)提供最底层的图形应用,Cairo构建于X System上, 而GTK又依赖于Cairo, Gtk又是Gnome的一部分.
回过头来, Cairo和OpenGl都是比Gtk+更低层次的抽象, 但他们是同一层次的抽象吗?Opengl和X window system 谁更底层?
这里说:
"In the X Window System, OpenGL rendering is made available as an
extension to X in the formal X sense: connection and authentication are
accomplished with the normal X mechanisms"
也就是说, X system可以通过opengl来构建。 果然, Xgl就是一个构建于opengl驱动上的 X server(wikipedia: Xgl is an X server architecture designed to take advantage of modern graphics cards via their OpenGL drivers, layered on top of OpenGL via glitz.). 原来opengl是驱动级别的啊。但X server也有其他实现, 不一定是基于opengl的,X.Org reference implementation是最常用的X server.
===========================================================================================
http://my.oschina.net/wolfcs/blog/110507 http://terryblog.blog.51cto.com/1764499/346996/
Android框架所提供的API与(JAVA)J2MEJSR239 OpenGL ES API非常相似,但并不是完全相同。如果你熟悉J2MEJSR239规格,请注意不同的地方。
Android的框架API和NDK都支持OpenGL.本主题面向Android框架接口.关于NDK的更多信息,请观NDK开发文档.
===========================================================================================
目前,在Linux操作系统中,一般可将图形应用库粗略地分为三个不同层次:
第一层次是图形基础设施,它们本身没有提供相应的应用程序编程接口,而是集成在操作系统中或采用某种封装形式,用作其他高级图形或者应用程序的基本函数库,较典型的有X Window、SVGALib、framebuffer(帧缓冲)和LibGGI等;
第二层次是高级函数库,它们提供了大量的应用程序编程接口,较典型的有Xlib、GDK、GTK+、QT、SDL、OpenGL、PEG和DirectFB等;
第三层次多任务窗口系统图形用户界面GUI,较典型的有 Microwindows、OpenGUI、Qt/Embedded和MiniGUI等。
X11,GTK,QT,GNOME
X11是X Window System Protocol, Version 11(RFC1013),是X server和X client之间的通信协议。X server是xfree86/xorg驱动下的显示设备鼠标键盘统称,X client通过X11协议和xfree86/xorg实现的X server通信,比如,告诉它画一个左上角坐标为(x,y),宽为w,高为h的窗口,xfree86就让显示器把屏幕上的小灯(像素)打亮,然后你就看到了一个窗口。
为了方便开发人员编写X clients,就有了Xlib来封装协议;Xlib不够方便,于是就有了qt和gtk,提供了很多窗口控件(widgets)。
为了方便用户,就出现了gnome和kde等桌面管理系统。一般来说,linux用户看到的界面就是其中之一了。gnome用的是gtk库,kde用的是qt库。
但毫无疑问, GTK, QT也应该可以画点, 画线, 但他们设计的目的本来就在于图形界面的开发, 他们是图形系统中更高层次的抽象, 比方来说, GTK+从2.8起由Cairo来实现其组件的绘制, 而Cairo正和OpenGL一样, 是更低层次的图形库。
OpengGL
OpengGL 只是定义了一组接口, 具体的实现一般由各显卡厂商提供(Nvidia, ATI,...),也因此能更好的利用硬件的性能, 所以,我们可以看到OpenGL-compatible这样标注的显卡。 这也从一个侧面反应了opengl的底层性。仅以画点, 线,面来说,当性能要求高时, 应当考虑opengl。 一般的桌面应用Gtk应该够了。
我注意到GNU Xaos(一个分形演示软件)用的是libx11-dev来做图形绘制, 那么, libx11和gtk又有什么联系?
拜读了X Window System Architecture Overview HOWTO以后, 我才明白这之间的关系: X window System(X11, Xlib)提供最底层的图形应用,Cairo构建于X System上, 而GTK又依赖于Cairo, Gtk又是Gnome的一部分.
回过头来, Cairo和OpenGl都是比Gtk+更低层次的抽象, 但他们是同一层次的抽象吗?Opengl和X window system 谁更底层?
这里说:
"In the X Window System, OpenGL rendering is made available as an
extension to X in the formal X sense: connection and authentication are
accomplished with the normal X mechanisms"
也就是说, X system可以通过opengl来构建。 果然, Xgl就是一个构建于opengl驱动上的 X server(wikipedia: Xgl is an X server architecture designed to take advantage of modern graphics cards via their OpenGL drivers, layered on top of OpenGL via glitz.). 原来opengl是驱动级别的啊。但X server也有其他实现, 不一定是基于opengl的,X.Org reference implementation是最常用的X server.
===========================================================================================
http://my.oschina.net/wolfcs/blog/110507 http://terryblog.blog.51cto.com/1764499/346996/
相关文章推荐
- <2014 05 10> Android平台开发攻略
- <2012 11 14> Linux V4L2驱动架构解析与开发导引
- Android平台一些流行的使用3D技术开发的锁屏
- <7.22>Android开发 补充知识点
- Android -- 蓝牙开发 <一>
- <<Android源码设计模式解析与实战>>读书笔记----- Android NDK开发学习
- Android OpenGL ES 简明开发教程 03 <3D绘图基本概念>
- <转载>Android软件开发之获取通讯录联系人信息
- <2014 05 21> 互联网时代的C语言——Go
- <<Android开发艺术探索>>读书笔记--IntentFilter
- Android OpenGL ES 简明开发教程 05 <添加颜色>
- <2014 05 09> Lucida:我的算法学习之路
- 平台框架开发的<好莱坞大明星原则> 推荐
- Cocos2d-x 3.x 全平台(Android,iOS)新手开发配置教程攻略
- android 平台下免费的 3D/2D 开源项目
- Android平台一些流行的使用3D技术开发的锁屏
- 杭州_大数据的<Java/Hbase+C>云平台开发技术
- <摘录>cocos2d-x 从环境搭建到win32项目移植android平台
- <<Android 开发艺术探索>> 第一章 Actiivty的生命周期和启动模式
- <转>Android开发使输入框点击弹出日期选择对话框的方法