其他
科普 | 矩阵在空间变换中的应用
一、应用背景
近年来随着计算机技术的发展,计算机软硬件也得到了很大的提升,移动端图形可视化技术也越来越被重视,三维仿真行业越来越受众人追捧。WebGL技术在图形可视化邻域可谓是功不可没。WebGL是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示模型和3D场景。
在三维仿真工作中仿真的对象也从宏观到微观无一例外,大到城市建筑群,小到独立楼宇,甚至是一草一木都是仿真的对象。身处三维空间的任何一个可见的物体都必有一个属性,那就是位置属性。那么我们在三维场景中可视化这些物体时必然得先标定这些物体应该存在的位置,那么问题来了,如何获取这个物体的精确位置呢?在实际操纵的过程中就经常遇到这个问题,一种传统低效的方法就是先获取大概位置,再此基础之上一点一点通过估算更改代码中给物体设定的位置,然后运行程序在前端页面查看物体位置是否准确,直到物体定位到理想的位置。这种操作方式只能满足少数据量的物体定位问题,当仿真场景越来越大,场景中的对象的数量越来越多,这种传统的方法越显无力,那么如何高效且直观的给物体定位呢?
二、实现原理
局部空间(Local Space)/ 物体空间(Object Space) 世界空间(World Space) 观察空间(View Space)/ 视觉空间(Eye Space) 裁剪空间(Clip Space) 屏幕空间(Screen Space)
模型矩阵(Model Matrix) 观察矩阵(View Matrix) 投影矩阵(Projection Matrix)
三、实现过程
建立物体所在位置(Pos)的局部坐标到世界坐标的变换矩阵(T) 屏幕坐标点转裁剪坐标:分别计算出A、B两点在物体X所在的局部坐标系(O)中的位置 计算A点到B点(向量ab),计算ab向量在局部坐标系(O)各个轴向上的分量 变换矩阵(T)左乘轴向上的变化量得到新的世界坐标(Pos’),即为物体的新位置,操作动画如下:
建立物体所在位置(Pos)的局部坐标到世界坐标的变换矩阵(T) 求T的逆矩阵T’ 屏幕坐标点转裁剪坐标:分别计算出A、B两点在物体X所在的局部坐标系(O)中的位置 求向量OA与OB的夹角 根据旋转轴与旋转角度计算四元组(Q) 根据四元组计算旋转矩阵(M) 更新模型矩阵
往期推荐
点亮