3d微信签到源码
‘壹’ Three.js源码解读一:Object3D
可能很多同学会发现,学习Three.js的API非常容易,但是真正理解API的作用却非常难。其实让大家感到难的并不是Three.js本身,而是Three.js背后所隐藏的3D图形学知识。本系列Three.js源码解读文章,会帮你一边补齐3D图形学的基础知识,一边真正理解到Three.js的实现原理,知其然,知其所以然。
Object3D是ThreeJS中大部分物体的基类,它包含了物体的位移,旋转,缩放,以及各个物体父子关系的js实现。选取Object3D几个重要的属性做解释:
一个3D对象往往由多个父子对象组成,父对象的位移, 旋转, 缩放会传递给所有的子对象。
this.parent指向父对象,this.children包含了所有的子对象。
通过 add 为物体添加子对象。需要注意的是,如果该子对象有其他的父对象,会先解除子对象和旧的父对象的父子关系,然后将子对象添加到新的父对象中。
this.matrix表示物体自身的本地形变,this.matrixWorld表示物体的全局形变。当物体没有父对象时,全局形变就是本地形变。
为什么对象组合这么重要呢?看下面的例子:
这两个立方体共同组成了一个3D对象,下面的立方体为禅祥段底座,上面的立方体为操作臂。当底座转动的时候,操作臂会同样转动,所以操作臂的形变会传递给底座。当操作宴御臂旋转时,底座不会被影响。
这里,底座就是操作臂的父对象。只要简单的将底座的全局形变(this.parent.matrixWorld)和操作臂的本地形变贺誉(this.matrix)相乘,就能得到操作臂的最终形变。是不是很方便?
3D物体的位移,旋转,缩放都可以通过矩阵表示。其中,旋转除了通过矩阵,还可以通过欧拉角和四元数表示。
Object3D的rotation代表物体旋转的欧拉角表示,quaternion代表了四元数表示,他们是3D物体统一旋转的不同数学表达方式。(矩阵,欧拉角,四元数表示旋转
onRotationChange , onQuaternionChange 这两个回调用于同步欧拉角和四元数,保证他们代表着相同的旋转角度。
3D交互一个很大一部分工作量是需要在物体的本地空间( this.matrix )和世界空间( this.matrixWorld )进行坐标转换。
‘贰’ 微信公众平台二维码签到的原理是什么有代码可以熟悉一下吗
公众平台二维码签到原理有两种形式,一种是会议之前先报名,另一种就是直接到会议现场扫描二维码签到。