简介
上一节中我们在canvas中绘制了点,这一节我们来绘制直线。
计算机图形学中,绘制直线的算法很多,比如:DDA算法,中点画线算法...
今天我们来讲一个经典的算法:Bresenham算法。经典之所以是经典,因为它既保证了绘制直线的效率,而且也能绘制圆弧、抛物线等。
大家都知道,显示器屏幕像素是由像素组成的,我们看到画面的过程,其实就是每个像素填充不同的颜色罢了。简单说,不就是一个二维数组嘛,只不过数组中每个元素存储的是颜色值而已。我们上一节绘制点,就是在canvas中对应的图像缓冲区中填颜色嘛,而canvas的图像缓冲区屏幕的显示原理一样嘛,也是个二维数组嘛。我们在canvas上绘图,就等于把canvas当作显示器嘛。
如果只能显示静态的图像,那你可能买了个假显示器,最起码也得能够放个动画片呀。所以,显示器一般都是不停刷新的,专业点又叫扫描。至于为什么要扫描,这个和显示器的显示原理有关系,我们就不深究了。一般来说,是先扫第一行,再扫第二行,再扫第三行... 当扫到最后一行,你就看到一幅完整的图像了。当这个扫面速度够快的话,由于人眼特殊的成像物理结构,你就会看到流畅的画面。这个扫完一次,我们叫做一帧。我们玩游戏的时候,经常会看到帧率(FPS),就是一秒钟能够扫多少次,扫30次,那就是30帧。
但是你想想,什么叫足够快?1秒钟扫描30次?60次?120次?一般来说,一秒扫30次,也就是30帧的时候,我们肉眼就能看到流畅的画面了,低于30帧那就影响你的游戏体验了。
在这里插一句,我们玩游戏的时候,经常会看到有个【绘制同步】选项。到底勾选不勾选呢?选不选有啥影响呢?
这个其实就是和显示器的显示原理相关的。我们想想,游戏的画面是不是实时绘制到屏幕上的,实时哦。你放一个Q,屏幕上立马就能看到Q的特效,还能看到你这个Q打中敌人没有,如果打中了敌人会有什么反应,敌人有没有护甲,减多少血,他血够不够,他队友有没有奶妈,奶妈是不是毒奶。。。所有的这些你都是实时看到的哦。所以,游戏不仅要实时显示画面&