我不是学这个专业的,如果想系统或更深入的了解请百度或找其他资料来深入了解,这里只做简单介绍和个人理解.
我们对帧
这个词应该不陌生,简而言之就是屏幕每次更新都是一张图片,也就是每一帧,通过不断更新,形成长期更新的效果,
FPS指的是每秒更新的频率(也就是每秒切换多少张图片),通常达到24FPS就可以算作流畅(我们的肉眼已经看不出来切换带来的闪烁了),电影就是按照这个标准来的。
在这之前我们先脑补两个简单的小东西分别是 [电子束
,荧光粉
],它们是显示设备中用于渲染你的屏幕的硬件设备.
电子束通过逐行扫描透过荧光粉点亮了你的屏幕一条
区域,它不断的透过荧光粉逐行扫描你的屏幕,当它离开时,当前区域会瞬间暗下来,
(其实你屏幕当中一直有一个最亮的一个区域,你可以把它想象成水平方向的一条线,它正是 电子束当前照亮的地方,然而最暗的地方就是当前帧下它最开始扫描的地方. 这也就是为什么七八十年代的老电视机没信号或电压不稳时,会出现一行一行的灰条)
就这样一行一行的扫描,直到把你屏幕扫满了之后,它再开始下一帧的工作(它很悲催,下一帧还是这个工作)这就出现了一个问题,当电子束到你屏幕下半部分时,你的上半部分的亮度已经在衰减
,
这样在每帧切换时肯定会出现闪烁问题。
在早期,为了解决这个问题,就只有加快刷新频率,在上半部分还没变暗时,下半部分已经扫描完成。 如果改成60FPS(1/60秒),人眼能感觉到的衰减就很小了,可是这样做,相比以前更短的时间内完成扫描总行数的任务,技术要求过高,只能使用另一个方法实现,那就是隔行扫描。
隔行扫描比逐行扫描出现的晚,早期被应用在电视广播上。如上所述,
正是因为它在满足画质的情况下对技术有着硬性的要求,所以才迫使人们使用隔行扫描这种投机取巧
的方法,
说投机取巧再合适不过了,不过没有贬义的意思. 所谓为投机取巧是因为,他把上下两部分平均的分开屏幕的垂直方向上,使得人察觉出来的敏感度降低。
顺着历史接着说,逐行扫描我们遇到的困境:
- 由于逐行扫描方式两个画面之间停留间隔较久,体验效果不佳.
- 如果刷新频率上去了,可是因为技术问题,不能扫描所有行.
既然一帧渲染不了所有行,那就两帧呗,隔行扫描应运而生,它先渲染奇数行,之后第二次渲染偶数行。
只要频率高,两次扫描的间隔的衰减是看不出来的。
我们可以通过 css 媒体查询来查看设备是属于哪种屏幕
p {
font-family: cursive;
}
@media (scan: interlace) {
p {
font-family: sans-serif;
}
}
@media (scan: progressive) {
p {
font-family: serif;
}
}
这样,我们可以在两种不同的屏幕上进行布局以及动画的选择。