![程序员数学:用Python学透线性代数和微积分](https://wfqqreader-1252317822.image.myqcloud.com/cover/548/42617548/b_42617548.jpg)
上QQ阅读APP看书,第一时间看更新
第 3 章 上升到三维世界
本章内容
- 建立三维向量的心智模型
- 进行三维向量运算
- 使用点积和向量积测量长度和方向
- 在二维平面上渲染三维对象
二维世界很容易可视化,但真实的世界是拥有三个维度的。无论是使用软件设计建筑、制作动画电影,还是运行动作游戏,软件都需要考虑到我们生活在三维空间里。
二维平面就像本书里的一页纸,存在垂直方向和水平方向。增加第三个维度之后,就可以讨论页面外的点和垂直于页面的箭头了。但即使程序模拟了三维空间,大多数计算机屏幕只能显示二维画面。本章的任务是构建一些工具,用于把三维向量测量的三维对象转换成二维的,来把这些对象显示在屏幕上。
球体是三维形状的一个例子。一个绘制好的三维球体如图3-1所示。但如果没有阴影,它看起来只是一个圆形。
![](https://epubservercos.yuewen.com/8EA7F4/22124474309908206/epubprivate/OEBPS/Images/243.jpg?sign=1739623101-sHR4n6BzwOizH21EPsnE8AqrwnViCJEp-0-abf100cadd374793daf1dd40f58dbd5e)
图3-1 二维圆形上的阴影使它看起来像三维球体
阴影能够表现出光线照射球体的角度,球体就有了层次感。一般的策略不是绘制完美的球体,而是用多个多边形来组成近似的球体,其中每个多边形都可以根据与光源形成的具体角度进行着色。不管你信不信,图3-1里并不是圆球,而是8000个颜色深浅不一的三角形。图3-2展示了三角形较少时的一个例子。
![](https://epubservercos.yuewen.com/8EA7F4/22124474309908206/epubprivate/OEBPS/Images/244.jpg?sign=1739623101-3Zo3W0K8k1rehL7Gz2rT4EQ44nWhNLhQ-0-d6cffdff76d1cd0527a83a40332d43dc)
图3-2 用许多纯色小三角形绘制有阴影的球体
可以通过数学工具来定义二维屏幕上的三角形:只需要三个二维向量来定义每个顶点。但是,必须在三维空间里表示它们,否则无法决定如何为其着色。为此,我们需要学会使用三维向量。
当然,这个问题已经得到了解决。我们将首先用一个预置的库来绘制三维图形。一旦对三维向量有了一定的认识,就可以构建自己的渲染器,并展示如何绘制球体。