c++在屏幕上显示直线_从零开始实现3D软光栅渲染器 (3) 绘制直线

本文介绍了如何使用Bresenham算法在屏幕上显示直线,讲解了算法原理,包括误差变量d的使用和优化,以及如何通过整数运算代替浮点运算提高效率。此外,还讨论了显示器的刷新原理和游戏中的垂直同步选项对画面流畅性的影响。
摘要由CSDN通过智能技术生成

简介

上一节中我们在canvas中绘制了点,这一节我们来绘制直线。

计算机图形学中,绘制直线的算法很多,比如:DDA算法,中点画线算法...

今天我们来讲一个经典的算法:Bresenham算法。经典之所以是经典,因为它既保证了绘制直线的效率,而且也能绘制圆弧、抛物线等。

大家都知道,显示器屏幕像素是由像素组成的,我们看到画面的过程,其实就是每个像素填充不同的颜色罢了。简单说,不就是一个二维数组嘛,只不过数组中每个元素存储的是颜色值而已。我们上一节绘制点,就是在canvas中对应的图像缓冲区中填颜色嘛,而canvas的图像缓冲区屏幕的显示原理一样嘛,也是个二维数组嘛。我们在canvas上绘图,就等于把canvas当作显示器嘛。

444bf8ade21c4c8e2176127fdb643dda.png

如果只能显示静态的图像,那你可能买了个假显示器,最起码也得能够放个动画片呀。所以,显示器一般都是不停刷新的,专业点又叫扫描。至于为什么要扫描,这个和显示器的显示原理有关系,我们就不深究了。一般来说,是先扫第一行,再扫第二行,再扫第三行... 当扫到最后一行,你就看到一幅完整的图像了。当这个扫面速度够快的话,由于人眼特殊的成像物理结构,你就会看到流畅的画面。这个扫完一次,我们叫做一帧。我们玩游戏的时候,经常会看到帧率(FPS),就是一秒钟能够扫多少次,扫30次,那就是30帧。

但是你想想,什么叫足够快?1秒钟扫描30次?60次?120次?一般来说,一秒扫30次,也就是30帧的时候,我们肉眼就能看到流畅的画面了,低于30帧那就影响你的游戏体验了。

在这里插一句,我们玩游戏的时候,经常会看到有个【绘制同步】选项。到底勾选不勾选呢?选不选有啥影响呢?

77c1f0cee426e1b89b138b90ae1d44fd.png

这个其实就是和显示器的显示原理相关的。我们想想,游戏的画面是不是实时绘制到屏幕上的,实时哦。你放一个Q,屏幕上立马就能看到Q的特效,还能看到你这个Q打中敌人没有,如果打中了敌人会有什么反应,敌人有没有护甲,减多少血,他血够不够,他队友有没有奶妈,奶妈是不是毒奶。。。所有的这些你都是实时看到的哦。所以,游戏不仅要实时显示画面&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值