Python讲透视原理(三) -- 双灭点透视(修正版)

本文探讨了如何在编程中解决立方体的透视问题,遵循PDCA和敏捷思想,通过观察角度和灭点调整实现逼真的透视效果。作者通过实例演示和Python编程展示了如何计算观察角和处理双灭点问题,揭示了问题深入和不断优化的过程。
摘要由CSDN通过智能技术生成

上一篇留了一个问题,最初立方体不符合透视原理,只是不影响讲灭点。后来强迫症一范,思考一下还是解决了吧,否则如鲠在喉。

为什么不在上一篇上直接修改,犯错也是成长和学习的一部分,它且留当纪念自己走的弯路。这比较符合PDCA和敏捷思想,先做再改进,软件工程最重要的思想。如果一开始奔着完美去做,八成啥也做不出来,想法胎死腹中,无法落地。

问题引入

先看啥问题,立方体顶面是正方形是不对的。

为何不对?从透视角度来看,如果物体顶面是正方形,那么只有视角从物体正上方看,才是正方形。显然这个图不是从正上方看的,视觉矛盾就出现了。

问题分析

那从测上方看,顶面应该是什么样子,简单!生活中注意观察就能发现规律,比如我们观察长方体的纸巾盒,顶面是长方形,四个角是直角,从正上方看才是直角。我们从测前面拍个照片看,明显不是直角。

总结规律

物体透视变形(先不考虑灭点,近距离就当平行的)跟人眼观察角度有关。我们视角越接近正上方,形状变形越小;越是与被观察面夹角越小,被观察面变形越大。

不妨将眼睛和被观察面觉得角度称为观察角,两个极限观察点:

1. 正视(观察角90度),被观察的面无变形,(其实是有等比缩放关系,先不考虑)

2. 平视(观察角0度),被观察面变成直线,变形最大。对于前后两个角度,是变大成180度了,左右两个角度变成0度,成为一条线。

Python上图

通过点P1坐标、长、宽、高、立方体绕高度(Z)轴旋转角度、观察角,这几个参数绘制长方体终于看起来舒服了,其他七个点通过计算而来。

观察角怎么计算,其实很简单,不用计算,想想观察角度影响什么?它只影响顶面两个直角变形。所以我们直接指定一个直角变形参数就行了。 比如上图90度变形为135度,透视效果就出来了。

其他7个点坐标就是几何的简单三角函数计算。

Python上动效

先上个双灭点变形后的图

编程世界:www.pycodeworld.com 支持源码查看和在线修改参数。

灭点和90度变形角不能乱改,否则不符合视觉效果。

双灭点透视(改进版)

引入新问题

加入观察点三维坐标,通过观察点和被观察物体的位置关系,计算生成灭点和90度角变形后的角度。问题又深入了。。。感觉自己掉坑了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值