CSS3 matrix3d() 矩阵变换方式及应用实例

亮术网 2017-08-03 本网原创

  CSS3中的矩阵,既可制作2d效果又可制作3d效果,2d效果在前面的文章中已经介绍过,本篇主要介绍3d矩阵。2d矩阵是在一个平面内,而3d矩阵在空间中,也就是在 X、Y轴的基础上再增加Z轴。

  2d矩阵为3×3的矩阵,取六个值,即 matrix(a, b, c, d, e, f);而3d矩阵为4×4的矩阵,取16个值,即 matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, e, f, 0, 1),它相当于2d的 matrix(a, b, c, d, e, f),并且只是其中一种取值。

 

  一、matrix3d的基本变形

  1、matrix3d的基准数值

  matrix3d(1, 0, 0, 0,
        0, 1, 0, 0,
        0, 0, 1, 0,
        0, 0, 0, 1
       )

  从表达式中可以看出,16个值分为四组,每组四个值,第一组值第一个为1,第二组值第二个为1,第三组值第三个为1,第四组值第四个为1,有一种序号上的递增关系。

 

  2、matrix3d矩阵放大缩小

  (x y z 1)(2, 0, 0, 0,//x方向放大2倍
         0, 3, 0, 0,//y方向放大3倍
         0, 0, 4, 0,//z方向放大4倍
         0, 0, 0, 1
        )
  =(x*2, y*0, z*0, 1*0,
    x*0, y*3, z*0, 1*0,
    x*0, y*0, z*4, 1*0,
    x*0, y*0, z*0, 1*1
   )

 

  3、matrix3d矩阵只有平移

  matrix3d(1, 0, 0, 0,
        0, 1, 0, 0,
        0, 0, 1, 0,
        tx,ty,tz, 1
       )

 

  4、matrix3d矩阵只有旋转

  1)只有X轴上的旋转,没有平移、扩大、缩小

  matrix3d(1, 0, 0, 0,
        0, Math.cos(角度值),Math.sin(-角度值), 0,
        0, Math.sin(角度值), Math.cos(角度值),  0,
        0, 0, 0, 1
       )

  2)只有Y轴上的旋转,没有平移、扩大、缩小

  matrix3d(Math.cos(角度值), 0,Math.sin(角度值), 0,
        0, 1, 0, 0,
        Math.sin(-角度值), 0,Math.cos(角度值),0,
        0, 0, 0, 1
       )

  3)只有Z轴上的旋转,没有平移、扩大、缩小

  matrix3d(Math.cos(角度值), Math.sin(-角度值), 0, 0,
        Math.sin(角度值), Math.cos(角度值),  0, 0,
        0, 0, 1, 0,
        0, 0, 0, 1
       )

 

  二、matrix3d矩阵应用实例

  1、matrix3d取基准数值

  html代码

  <div class="matrix3d">基准数值:transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)</div>

  CSS样式:

  .matrix3d{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);width:230px;height:130px; border:1px solid #ab9595;background-color:#e3e2e0; padding:8px;}

  效果图:

基准数值:
transform:
matrix3d(1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1)

  从图中可以看出,长方形没有任何变化。

 

  2、matrix3d向上旋转

  html代码

  <div class="matrix3d-tr">transform:matrix3d(0.826357, -0.198658, -0.506952, 0,0, 0.870835, -0.8, 0, 0.580619, 0.421769, 0.692157, 0, 0,0,0,1)</div>

 

  CSS样式:

  .matrix3d-tr{transform:matrix3d(0.826357, -0.198658, -0.506952, 0, 0, 0.870835, -0.8, 0, 0.580619, 0.421769, 0.692157, 0, 0, 0, 0, 1);width:300px;height:130px; border:1px solid #ab9595;background-color:#e3e2e0; padding:8px;}

  效果图:

transform:
matrix3d(0.826357, -0.198658, -0.506952, 0,
0, 0.870835, -0.8, 0,
0.580619, 0.421769, 0.692157, 0,
0,0,0,1)

  从图中可以看出,长方形的左下点往下移了一点,并以左下点为旋转顶点向上旋转了一定的角度。

 

  3、matrix3d向下旋转并拉伸

  html代码

  <div class="matrix3d-br">transform:matrix3d(0.826357, -0.198658, -0.506952, 0, 0, 0.870835, -0.8, 0, 0.580619, 0.421769, 0.692157, 0, 0,0,0,1)</div>

 

  CSS样式:

  .matrix3d-br{transform:matrix3d(3, 0.5, 0, 0, 0, 0.7, 0, 0, 0, 0, 6, 0, 30, 10, 0, 1);width:300px;height:150px; border:1px solid #ab9595;background-color:#e3e2e0; padding:8px;}

  效果图:

transform:
matrix3d(0.826357, -0.198658, -0.506952, 0,
0, 0.870835, -0.8, 0,
0.580619, 0.421769, 0.692157, 0,
0,0,0,1)

  从图中可以看出,长方形不但沿X轴拉伸了,并且往下平移和旋转了。

本文浓缩标签:translatematrixCSS3