OpenGL为什么要用4X4矩阵

目标:用4×4矩阵把1个点从 (2, 3, 4) 平移到 (5, 3, 4)(即x方向+3)

第1步:齐次坐标表示( 齐次坐标是给普通3D坐标 (x,y,z) 加一个魔法数字 w ,变成 (x,y,z,w),让计算机能统一处理移动、旋转、缩放和透视**)**
  • 普通3D坐标(2, 3, 4)

  • 齐次坐标 :加一个 w=1(2, 3, 4, 1)

    w=1 代表"这是一个点",w=0 代表"方向",比如光线)

第2步:构造平移矩阵

要移动 (x+3, y+0, z+0),对应的4×4矩阵是:

解读

  • 左上角3×3部分(1,0,0; 0,1,0; 0,0,1)负责旋转/缩放(这里不变)。

  • 最右边一列 (3, 0, 0, 1) 负责平移x+3)。

第3步:矩阵乘法计算

结果(5, 3, 4, 1) → 去掉 w 就是 (5, 3, 4),平移成功!

Q1:为什么不能直接用3×3矩阵?

  • 尝试用3×3矩阵做平移:

错误! 结果 (14, 3, 4) 不是我们想要的 (5, 3, 4)
原因 :3×3矩阵的平移项会乘以 z 值(这里 3×4=12),无法单独加3。

Q2:w=0 时会发生什么?

  • 如果是方向向量 (2, 3, 4, 0)(比如光线方向):

结果不变! 因为 w=0 让平移失效(方向向量不受位置影响)。