计算机知识从职业发展的横向来分,可以分为:
UI
存储
网络
我们先论述UI之路的学习.这里的UI是广义的,包括,图形,图像,视频多媒体扥等。
UI是一种直接面对终端用户的一种用户体验(UX)。
广义UI知识适用于:
手机、平板电脑开发。
2D、3D游戏开发
视频,多媒体,浏览器开发
其他特殊行业,比如医学成像,遥感。
好,从现在开始我们开始我们的UI学习之旅。
开始之前,我先要做一点关于我文章风格简单的说明:
我的写作风格,比较松散,属于散打风格。这样有利于引出大量的知识点和概念。
有心的同学可以根据我提及的概念,和名词,使用google和维基百科去深入了解。
Start!
1)学习UI之前,我们要首先明确两个概念:
渲染
显示
这是UI流程的两道工序,他们的分界点就是显存中的帧缓冲(framebuffer)。
当然我们讨论的大部分主题都是涉及渲染的。
至于显示,则很大一部分都是由硬件去完成的,知识点不是很多,所以我会另外写文章介绍。
2)渲染之图形和图像。
渲染其实就相当于我们显示生活中,画师用画笔在画布上画画。
只是我们这里,画师换成了CPU和G PU
画布换成了FrameBuffer.
画画的过程就相当于CPU和GPU通过大量渲染算法,最终生成可供显示的帧缓冲的内容。
渲染算法又分为
2D算法和3D算法。
学习渲染算法之前,要区分好两个比较容易混淆的概念:
图形
图像
以上两个概念可以联想到:
矢量图
位图
2D图形渲染主要是一些点、线、圆、椭圆等几何图形的处理,计算机通过2D图形渲染算法通过CPU和GPU (一般说来是通过 CPU).
2D图像渲染(其实这里说图像处理更恰当一点,因为图形处理是从无到有的,而图像一般是先通过照相摄像等到了原始的素材,再在这些原始的素材上,进行处理),主要包括一些alpha混合,锐化,非线性变换、覆盖和带遮罩的覆盖等。
2D图形和图像共有的一些算法包括scaling时候的一些插值算法。所谓scaling就是放大缩小。还包括旋转。
其实2D游戏,更多的使用的是2d图像处理,因为其使用了大量的背景和精灵图片,程序知识按照一定的逻辑,对其进行组合和移动,从而表现出丰富的游戏效果。比如,俄罗斯方块、超级玛丽、也包括那些常见的2D网游。基于覆盖算法,和TILES组合。
3D渲染算法则复杂得多!
3D渲染一般分为实时和非实时的两种:
实时渲染强调速度,每秒种必需渲染多少帧,一般适用于游戏。其模型逼真度一般比较粗略。
而非实时渲染则强调渲染的效果和模型的精细度。一般适用于影视制作,CG设计等。其使用的渲染算法如光线追踪,则是计算机能力的黑洞,消耗大量的计算资源。
从渲染我们须论及CPU和GPU的所承担的工作。
CPU本身就具体有丰富的多媒体指令集。如SSE,MMX .
我们这里需要理解SIMD这个概念。
CPU的多媒指令擅长于:加权运算,如alpha混合;位运算,如遮罩,覆盖。
所以Cpu的处理能力用于图像处理软件如Photoshop
以及一些2D游戏,这些游戏中大量存在这overlay 运算,这里我们就要理解好sprite的概念,游戏精灵。
而GPU是一种并行计算架构,擅长于数据量敏感的大批量矢量运算。显卡不仅可用于实时游戏,和计算机图形设计,而且还可以作为一种并行架构用于大批量的计算敏感的科学和数学用途。比如CUDA和OPENCL等。
理解了GPU是一种并行计算架构,有助于帮助我们学习显卡编程的同时也学会并行计算的一些基本思想。比如说命令处理器和管线的概念。
现在的显卡都设计成可编程的,也就是说,我们可以从主存里把我们编译好的程序,载入到显存里面,然后通过命令处理器,让GPU的并行处理器(DPP)从显存里取回指令和数据,进行相关的运算。
3)软件架构
扯了这么多渲染的话题。其实渲染特别是3D渲染是一个很博大的知识领域。我会在其他文章里详细叙述。现在我简单介绍和有关于UI的软件栈。
软件技术本来就是基于“栈”思想的,也就是纵向上的分层思想来让复杂的问题简单化。解决软件复杂度的问题。
我在这里建议大家,学习一个领域,一定要弄清楚这个领域的知识链,最好从最源头的地方去理解是一种非常科学的学习方法,在UI这个地方,包括网络和存储,我都简单大家采取子底向上的方法。也就是说:
UI最重要的一个设备是显示器,其地位相当于网卡之于网络,硬盘之于存储。
从显示器和显示卡了解起,能让你“无疑惑的”掌握UI的相关知识点,就相当于自底向上的打通知识链的每个知识环节,不留疑问,这样也能让你学习到的知识更加牢固。
a.最低层的是显示器的知识,现在一般都是针对液晶显示器的知识。包括显示器件、显示驱动器、显示控制器(这个一般做到显卡上)等有关于硬件的知识。
b.次之底层的就是显卡的知识,这部分知识一般通过显示编程,也就是显卡驱动得到体现。
c.X server的知识: 现在的手机系统一般不采用x Server.但是需要提供相关的窗口管理,和底层事件分发的功能。包括对多客户端的并发控制和资源互斥。
d. 图形库,这包括很多3d方面的图形库,比如OPENGL, 以及一些2D的图形库。
e.众多的Toolkit,也就是UI框架包括QT, GTK,WxWidget, 也包括基于JAVA的一些UI框架库
聊到这里,下面就是一些具体知识点的学习了,我会另外用文章详细的介绍各个软件层面的知识点,包括显卡编程,图形库,和UI框架,X server和窗口管理器的知识。