向量

31 阅读2分钟

向量模块需要实现的功能

  • 基础运算:加减、数乘、点积、叉积、长度、归一化
  • 几何计算:距离、投影、反射、插值(线性插值lerp、球面插值slerp)
  • 坐标转换 Vec3->Vec4
  1. 向量加减

应用场景:

  • 平移
  • 相对位置计算,两点相减,得到两点方向向量
  • 定位:局部坐标+世界坐标,实现位置计算
  1. 数乘

应用场景:

  • 缩放
  • 位移:将方向向量乘以定长得到固定长度的位移向量
  • 法线缩放:非均匀缩放厚,法线向量需要数乘逆矩阵的转置,保证光照计算正确
  1. 点积

应用场景:

  • 角度测量:通过点积计算两个向量夹角
  • 可见性判断:相机视线向量和物体法线的点积,判断物体表面是否朝向相机(背面剔除)
  • 投影计算:将向量投影到某一轴或平面上(如3D点投影到2D视图)
  • 光照强度:光源方向和法线的点积,计算漫反射光照强度(影响模型的明暗显示)
  1. 叉积 应用场景:
  • 法向量计算:三角形两个边向量的叉积,得到三角形的法向量(用于光照、拾取检测)
  • 旋转方向判断:两个向量的叉积方向,判断旋转是顺时针还是逆时针
  • 坐标系构建:通过叉积生成正交的三轴向量,构建局部坐标系
  1. 长度

应用场景:

  • 距离:两点之间的长度
  • 精度校验:判断向量长度是否接近0,判断两点是否重合
  • 尺寸标注:提取向量长度作为尺寸标注数据
  1. 归一化

应用场景:

  • 方向向量统一:将任意方向向量归一化,得到单位方向向量(如相机的观察方向、光源的照射方向)。
  • 射线拾取:鼠标点击屏幕生成的射线。其方向向量归一化,确保射线检测的精度。
  • 点积、叉积的正确计算