css3的父元素设置perspective与子元素设置perspective()景深怎么叠加的

html-css046

css3的父元素设置perspective与子元素设置perspective()景深怎么叠加的,第1张

perspective是设置3d效果的景深,通俗来说就是设置你的眼睛与这个3d元素的距离。而生活经验告诉我们,你从远处和近处分别观察同一个物体(比如正方形)时,其3d效果肯定是不同的。

还有一个属性是perspective-origin,则是用来设置3d效果的视角的,说白了就是你观察3d元素的角度,正常情况下物体是放在你眼睛的正前方,你眼睛只需平视即可,如果把物体向上下左右不同方向移动,在你的头部不能移动的前提下,你的眼睛要想看到物体就需要随着物体的移动而转动,这就是视角。而在不同的视角下,物体的3d效果肯定也会不同(比如物体移动到你眼睛的上方,你能看到物体的底面,而当它移动到你眼睛的下方时,你看不到底面了,只能看到顶面)。

webgl可以用js调用openGL的,比如cs、极品飞车之类的游戏你应该知道,很多游戏都是openGL的,真正类似3D软件那种3D,里面有X,Y,Z轴向,构成一个立体空间,然后你可以放入一个人物、汽车或其他3D模型,上贴图,打灯光,游戏引擎实时渲染出带有凹凸、置换、颜色、漫射、反射、大气雾效、深景等通道组成成的游戏画面,openGL与3D软件渲染大原理是一样的,只是渲染精度没3D软件做图或做电影那么高,渲染算法和导入的3D模型面数、贴图大小什么的在openGL下都有限制,要保证游戏在主流的家庭电脑硬件上不卡。

css只有X,Y两个轴向,只能构成一个平面,不能构成一个真正的立体空间,你看到的网上css做的3D立方体的例子原理类似:ps里面你画三个正方形平面色块,通过拉伸、透视等方法变形把三个正方形拼成一个立体正方形盒子的三个面,这个是视觉上的欺骗,只能拼凑出简单的立体形状,css并没有在一个3D空间内生成带三个轴向的物体,也没办法通过css导入真正的3D模型来个转一圈之类的,你想用纯css做个3D机器猫就不行了。

如果是webgl,你可以建个机器猫模型,把obj格式的模型文件导入,然后指定贴图,灯光等等,加上js代码控制,可以在支持的浏览器上360角度的展示机器猫了。webgl原理就和游戏引擎一样(目前肯定没游戏引擎强大),只不过游戏引擎是用c++之类的来开发,展示的东西基本上都需要用户执行一个安装到本地电脑的过程,现在webgl你可以用js来开发,然后直接在浏览器上展示。

1. perspective()函数与perspective属性

在3D变形中,除了perspective属性可以激活一个3D空间外,在3D变形的函数中的perspective()也可以激活3D空间。

不同的地方是:perspective用在舞台元素上(变形元素们共同的父元素);perspective()就是用在当前变形元素上,并且可以与其他的transform函数一起使用。例如,可以把:

.stage {    perspective: 600px}123

写成:

.stage .box {    transform: perspective(600px)}123

perspective 属性和perspective()函数功能一样,但其取值以及运用的对象有所不同。

perspective属性可以取值为none或长度值;而perspective()函数取值只能大于0,如果取值为0或比0小的值,将无法激活3D空间;

perspective属性用于变形对象父元素;而perspective()函数用于变形对象自身,并和transform其他函数一起使用。

2. perspective-origin

perspective-origin属性必须定义父元素上。通常perspective-origin属性本身不做任何事情,他必须被定义在设置perspective属性的元素上。换句话说,perspective-origin属性需要与perspective属性结合起来使用,以便将视点移至元素的中心以外的位置。

3. backface-visibility属性

backface-visibility属性决定元素旋转背面是否可见。对于未旋转的元素,该元素的正面面向观看者。当其Y轴旋转约180度时会导致元素的背面面对观众。

backface-visibility: visible | hidden1

visible: 默认值,反面可见

hidden:反面不可见

一个元素