读懂 CSS 投影与透视

开发 前端
CSS(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。

投影

把三维物体变为二维图形表示的过程称为投影变换。

根据投影中心与投影平面之间距离的不同,投影可分为 「平行投影」 和 「透视投影」。平行投影的投影中心与投影之间的距离为无穷大,如左图;而对透视投影,这距离是有限的,如右图。

在 CSS 中,使用 transform3d 变换后的图形也就有了投影的概念。

平行投影

平行投影包括斜平行投影和正平行投影

开启transform3d后,在未开启透视的情况下,所有html元素默认处于translateZ=0的状态,即属于正平行投影

透视投影

一点透视

  • 视平线
  • 一个消失点

两点透视

  • 视平线
  • 两个消失点

三点透视

  • 视平线
  • 三个消失点

在css中,只有一点透视的概念。消失点就是 perspective-origin。

平行投影和透视投影

无数条投影线组成投影空间

透视投影的投影空间用四棱锥表示

平行投影的投影空间用四棱柱表示

最终投影得出的画面由棱柱/棱锥的每个截面(缩放到同一大小后)合成,所以透视投影就会出现近大远小,而平行投影反映了物体之间的绝对大小

css透视

perspective

css透视需要关注几个点

如图所示,

  • 投影中心:眼睛
  • 投影面:drawing surface
  • 即屏幕最终显示的效果
  • 投影面的translateZ=0
  • 物体:
  • 虚线的圆代表物体实际的大小
  • 图1代表物体translateZ>0的情况
  • 图2代表物体translateZ<0的情况
  • 实线的圆代表平行投影后的大小
  • 同时也代表在透视投影中,物体translateZ=0的情况
  • 蓝色的圆代表透视投影后的大小
  • 投影中心到投影面的距离:d
  • 即perspective的值
  • 如果物体translateZ>=d,那么将不会出现在投影面中
  • 物体到投影面的距离:z
  • 即translateZ的值

perspective-origin

perspective-origin即一点透视中的消失点,可以把每个正方体理解为不同origin时展示的画面

读者可通过在线示例了解更多细节:https://codepen.io/dkplus/pen/powJYgm

责任编辑:武晓燕 来源: Tecvan
相关推荐

2022-07-19 06:20:47

CSSbackground

2022-09-22 09:00:46

CSS单位

2009-07-10 15:18:48

Synth外观Swing外观

2013-05-10 16:42:26

2014-04-28 14:06:41

2023-05-17 08:28:55

2021-01-05 08:10:00

Css前端3D旋转透视

2011-04-26 13:46:57

投影机

2011-05-05 13:47:46

微型投影机

2022-05-12 08:01:18

KubernetesDocker容器

2011-04-29 10:53:35

投影幕

2010-09-13 13:44:35

CSS表格CSS表单

2017-02-20 11:48:15

戴尔

2022-12-08 14:18:45

2022-03-24 17:56:51

数据平台观测

2011-07-08 13:40:18

2010-08-18 13:45:07

IE6IE7FF

2010-09-01 15:28:11

CSSexpression

2018-07-30 13:34:04

2020-06-23 08:41:47

JavaScript开发技术
点赞
收藏

51CTO技术栈公众号