前面讲完单灭点透视和双灭点透视,三灭点透视原理是一样的,索性趁热打铁完成这个透视原理的讲解和实现吧。
三灭点透视
飞鸟视角,从高空俯视高楼,上大下小,所以高度方向存在一个灭点,位于地面以下,是高度平行边的交汇点。
所以三灭点透视相当于x, y, z方向各有一个灭点。在两灭点基础上,地下添加一个灭点。把点名字加上了,方便观看。
立方体在三灭点透视中,只保留P2点,从飞鸟视角,它是离观察点最近的点,其他点都需要变换。
顶点坐标变换
以P2为基础点不变:
NP2 = P2 ;
顶面按照双灭点连线法,可以确定NP3, NP6, NP7,也就是先确定顶面
NP0不能在以P0为参考了,因为透视上大下小,底面已经变形。在两灭点透视中,高度方向无差异,NP0可以使用P0位置和两个地平线灭点连线的交叉点;但在三灭点透视中,高度透视后P0/P1/P4/P5位置其实已经失效。
新的P0, P1、P4、P5要使用第三个灭点画出。
将所有顶面新的点NP2,NP3,NP6,NP7 与D2相连
高度方向缺少高度约束,那么:
NP1 = Line(P2,D2) 上从P2开始截取一个高度,就是NP1
NP0 = Line(NP3,D2) 和Line(NP1,D0)的相交点
NP5 = Line(NP6,D2) 和Line(NP1,D1) 的相交点
NP4 = Line(NP7,D2) 和Line(NP5,D0)的相交点
以上顶点计算顺序,想想为啥?其实手绘一下就能知道了。可以给小学生锻炼一下连线法。
Python上效果
turtle海龟图很简单,小学生都会用的,连线和交叉点方法已在elements库里。
上大下小,三组平行线交互于三灭点就成了。与灭点连线是这样子的:
Python动效
三灭点透视
代码百行左右,用了elements 绘图库,不用情况下预估也就200行。
编程世界 www.pycodeworld.com 提供源码及elements 绘图库。