OpenGL 矩阵

181 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情


  1. Swift Optional
  2. Swift Enum
  3. iOS开发 做一个三角形
  4. Swfit 指针类型
  5. Swift 属性(下)
  6. Swift 属性
  7. Swift 小结
  8. Swift 类与结构体(下)
  9. Swift 类的生命周期
  10. Swift 类的初始化器
  11. Swift 类与结构体
  12. OpenGL 压缩纹理
  13. OpenGL 隧道坐标计算
  14. 0penGL 像素格式及数据类型
  15. OpenGL 纹理对象
  16. OpenGL 纹理
  17. OpenGL 模型变化
  18. OpenGL 视图
  19. OpenGL 矩阵
  20. OpenGL 向量
  21. OpenGL 颜色混合
  22. OpenGL 深度测试的潜在风险
  23. OpenGL 浅析深度测试
  24. OpenGL 浅析隐藏面消除
  25. OpenGL 图元连接方式
  26. 记WKWebView与HTML完成交互两三事
  27. OpenGL 渲染流程图解析
  28. OpenGL 控制你的正方形
  29. OpenGL 专业名词解释
  30. OpenGL 环境搭建 - MacOS

今天我们来研究下 OpenGL 中的矩阵 的 概念定义和使用技巧:

矩阵 Matrix

假设,在空间有一个点 。使用 xy2 描述它的位置。此时让其围绕任意位置旋转一定角度 后.我们需要知道这个点的新的位置.此时需要通过矩阵进行计算; 为什么? 因为新的位貴的, 不单纯与原来的x还和旋转的参数有关。甚至于y和z坐标有关;

image.png

矩阵只有一行或者一列都是合理的。只有一行或者一列数字可以称为向量無也可以称为矩阵;

//三维矩阵/四维矩阵的声明
typedef float M3DMatrix33f191:
typedef float M3DMatrix44f[161 :

在其他编程标准中,许多矩阵库定义一个矩阵时,使用二维数组; openGr的约定里,更多倾向使用 一维数组;这样做的原因是:agenGt 使用的是 Co!um-xajor(以列为主)矩阵排序的约定;

image.png

奥秘之处,在于这 15 个值表示空问中一个特定的位貴: 这4列中,每一列都是有4个元素组成的向量; 如果将一个对象所有的顶点向量 乘以这个矩阵,就能让整个 对象变换到空间中给定的位貴和方向;

一个4*4矩阵是如何在3D空间中表示一个位置和方向的 列向量进行了特别的标注:矩阵的最后一行都为0,只有最后一个元素为1

单元矩阵

//单元矩阵初始化方式①
GLFloat m[] = {
    1,0,0,0, //X Column
    0,1,0,0, //Y Column
    0,0,1,0, //2 Column
    0,0,0,1 // Translation
    }
// 单元矩阵初始化方式 ②
M3DMatrix44 m = {
    1,0,0,0, //X Column
    0,1,0,0, //Y Column
    0,0,1,0, //Z Column
    0,0,0,1 // Translation
}
//单元矩阵初始化方式③
void m3dLoadidentity44f(M3DMatrix 44f m);