从矩阵走入 WebGL 世界

Created by jasonChen1982

陈剑鑫(阿里 UC)

营销活动

编程动画、WebGL

感受下矩阵

Feel by heart

矩阵

Matrix

CSS3 transform Matrix

transform 2d变换

translate
rotate
scale
skew

transform 3d变换

描述旋转

Expression rotation in math

矩阵

matrix3d




|        |
| matrix |
|        |
                

欧拉角

rotateX|Y|Z

四元数

rotate3d

svg动画

transform 2d

canvas 2d api

transform 2d

Matrix Is very important

transform 的实现基于矩阵

What is matrix


|m00  m01  m02  m03|
|m10  m11  m12  m13|
|m20  m21  m22  m23|
|m30  m31  m32  m33|
                

描述几何空间的仿射变换

矩阵乘法

变换坐标点


| x` |   |1  0  0  tx|   | x |
| y` | = |0  1  0  ty| * | y |
| z` |   |0  0  1  tz|   | z |
| w` |   |0  0  0   1|   | w |
                

  | x` | = |x + tx|
  | y` | = |y + ty|
  | z` | = |z + tz|
  | w` | = |  w   |
                

传递性


|1  0  0  tx|   |cosβ  -sinβ  0  0|
|0  1  0  ty| * |sinβ  cosβ   0  0|
|0  0  1  tz|   |  0    0     1  0|
|0  0  0   1|   |  0    0     0  1|
                

不符合交换律


.animate {
  transform:
    rotate(1turn) translateX(90px);
}
                        

.animate {
  transform:
    translateX(90px) rotate(1turn);
}
                        

额外价值

Extra value


|m00  m01  m02  m03|
|m10  m11  m12  m13|
|m20  m21  m22  m23|
|m30  m31  m32  m33|
                

进一步了解矩阵

单位矩阵


|1  0  0  0|
|0  1  0  0|
|0  0  1  0|
|0  0  0  1|
                

各种变换矩阵


位移矩阵          缩放矩阵          X轴旋转矩阵
|1  0  0  tx|   |sx  0   0  0|   |1   0     0    0|
|0  1  0  ty|   |0   sy  0  0|   |0  cosβ  sinβ  0|
|0  0  1  tz|   |0   0   sz 0|   |0 -sinβ  cosβ  0|
|0  0  0   1|   |0   0   0  1|   |0   0     0    1|


Y轴旋转矩阵             Z轴旋转矩阵
|cosβ   0   sinβ  0|   |cosβ  -sinβ  0  0|
|  0    1    0    0|   |sinβ  cosβ   0  0|
|-sinβ  0   cosβ  0|   |  0    0     1  0|
|  0    0    0    1|   |  0    0     0  1|
                

rotateZ(βdeg) 矩阵推导

x y
r(x, y)
(x`, y`) α β

// 单位圆得到等式
x` = cos(β+α) * r
y` = sin(β+α) * r
z` = z
                    

// 已知
r = √(x^2+y^2)
// 和差化积公式
sin(β+α) = sin(β)cos(α) + cos(β)sin(α)
cos(β+α) = cos(β)cos(α) - sin(β)sin(α)
// 正弦余弦定义
cos(α) = x/r
sin(α) = y/r
                    

// 愉快的代入 
x` = (cos(β)x/r - sin(β)y/r) * r = cos(β)x - sin(β)y
y` = (sin(β)x/r + cos(β)y/r) * r = sin(β)x + cos(β)y
                    

/* 所以猜想旋转矩阵 => */ |cos(β) -sin(β)|
                        |sin(β)  cos(β)|

/* 验证下     => */      |x`|   |cos(β) -sin(β)|   |x|
                        |y`| = |sin(β)  cos(β)| * |y|

x` = cos(β)x - sin(β)y
y` = sin(β)x + cos(β)y
                    

矩阵 + WebGL

WebGL

着色器、几何数据、渲染管线

位移矩阵


|1  0  0  tx|
|0  1  0  ty|
|0  0  1  tz|
|0  0  0   1|
                    

旋转矩阵


X轴旋转矩阵            Y轴旋转矩阵             Z轴旋转矩阵
|1   0     0    0|   |cosβ   0   sinβ  0|   |cosβ  -sinβ  0  0|
|0  cosβ  sinβ  0|   |  0    1    0    0|   |sinβ  cosβ   0  0|
|0 -sinβ  cosβ  0|   |-sinβ  0   cosβ  0|   |  0    0     1  0|
|0   0     0    1|   |  0    0    0    1|   |  0    0     0  1|
                    

旋转矩阵 * 位移矩阵


位移矩阵          X轴旋转矩阵             Y轴旋转矩阵
|1  0  0  tx|   |1   0     0    0|   |cosβ   0   sinβ  0|
|0  1  0  ty|   |0  cosβ  sinβ  0|   |  0    1    0    0|
|0  0  1  tz|   |0 -sinβ  cosβ  0|   |-sinβ  0   cosβ  0|
|0  0  0   1|   |0   0     0    1|   |  0    0    0    1|
                    

实用点~

4*4列矩阵 + canvas 2d完成三维效果

深入一点的应用

加上其它知识点~

thanks for paperplanes`s model

AR技术

矩阵在AR上的应用

demo

移动端的阻碍

WebRTC、Get video frame

VR技术

矩阵在VR上的应用

VRWeb VR 视觉

别说话,先上车

来松鼠村看看

Q&A

END

thanks