程序员数学:用Python学透线性代数和微积分
上QQ阅读APP看书,第一时间看更新

第 3 章 上升到三维世界

本章内容

  • 建立三维向量的心智模型
  • 进行三维向量运算
  • 使用点积和向量积测量长度和方向
  • 在二维平面上渲染三维对象

二维世界很容易可视化,但真实的世界是拥有三个维度的。无论是使用软件设计建筑、制作动画电影,还是运行动作游戏,软件都需要考虑到我们生活在三维空间里。

二维平面就像本书里的一页纸,存在垂直方向和水平方向。增加第三个维度之后,就可以讨论页面外的点和垂直于页面的箭头了。但即使程序模拟了三维空间,大多数计算机屏幕只能显示二维画面。本章的任务是构建一些工具,用于把三维向量测量的三维对象转换成二维的,来把这些对象显示在屏幕上。

球体是三维形状的一个例子。一个绘制好的三维球体如图3-1所示。但如果没有阴影,它看起来只是一个圆形。

图3-1 二维圆形上的阴影使它看起来像三维球体

阴影能够表现出光线照射球体的角度,球体就有了层次感。一般的策略不是绘制完美的球体,而是用多个多边形来组成近似的球体,其中每个多边形都可以根据与光源形成的具体角度进行着色。不管你信不信,图3-1里并不是圆球,而是8000个颜色深浅不一的三角形。图3-2展示了三角形较少时的一个例子。

图3-2 用许多纯色小三角形绘制有阴影的球体

可以通过数学工具来定义二维屏幕上的三角形:只需要三个二维向量来定义每个顶点。但是,必须在三维空间里表示它们,否则无法决定如何为其着色。为此,我们需要学会使用三维向量。

当然,这个问题已经得到了解决。我们将首先用一个预置的库来绘制三维图形。一旦对三维向量有了一定的认识,就可以构建自己的渲染器,并展示如何绘制球体。