OpenGL 视图

231 阅读3分钟

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


  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 [线性代数角度]

在线性代数数学的维度,为了便于书写。所以坐标计算.都是从左往右顺序,进行计算。如下 列公式: 变换后顶点向量 = V_local * M_mode1 * M_view * M_pro 变换后顶点向量 = 顶点 × 模型矩阵 × 观察矩阵 × 投影矩阵;

image.png

单元矩阵 Matrix [Openfl角度]

在openGI 的维度 •如下列公式: 变换顶点向量 = M_pro * M_view * M_model * V_1oca1 变换顶点向量 = 投影矩阵 × 视图变换矩阵 × 模型矩阵 x 顶点

image.png

矩阵左乘

  1. 从栈顶获取栈顶矩阵 复制到 mTemp
  2. 将栈顶矩阵 mTemp 左乘 mMatrix
  3. 将结果放回栈顶空间里;
inline void MultMatrix(const M3DMatrix44f mMatrix) {
    M3DMatrix44f mTemp;
    m3dCopyMatrix44(mTemp,pStack[stackPointer]);
    m3dMatrixMultiply44(pStack[stackPointer], mTemp, mMatrix);
    }
inline void MultMatrix (GLFrame& frame) {
    M3DMatrix44f m;
    frame.GetMatrix(m):
    }

代码段


//投影矩阵:projectionMatrix
modelViewMatix.PushMatrix();
M3DMatrix44f pm;
projectionMatrix.GetMatrix(pm):
modelViewMatix.MultMatrix(pm);
/观察者(视图变换)矩阵:viewMatrix
modelViewMatix.PushMatrix();
M3DMatrix44f mCamera;
cameraframe.GetCameraMatrix(mCamera);
modelViewMatix.MultMatrix(mCamera)
//模型变换矩阵:modelMartix
M3DMatrix44f mObjectFrame;
viewFrame.GetMatrix(mObjectFrame);
modelViewMatix.MultMatrix(mObjectFrame);

代码段 顶点着色器(gIsI)

attribute vec4 positionColor;
uniform mat4 projectionMatrix:
uniform mat4 modelViewMatrix:
varying low vec4 varyColor;
void main)
{
    varyColor = positionColor:
    vec4 vPos;
    1/4*4 * 4*4 * 4*1
    vPos = projectionMatrix * modelViewMatrix * position;
    al Position = vPos:
}

理解 在OpenGl 里的变化

变换解释
视图变换指定观察者位置
模型变换在场景中移动物体
模型视图描述视图/模型变换的二元性(2种看到模型转换的方式)
投影改变视景体大小和设置它的投影方式
视口伪变化,对窗口上最终输出进行缩放

视图变换

视图变换是应用到场景中的第一种变换,它用来确定场景中的有利位置,在默认情况下,透视投影中位于原点(0,0,0),并沿着 二 轴负方向进行观察 (向显示器内部"看过去〞

当观察者点位于原点(0,0,0) 时,就像在透视投影中一样。

视图变换将观察者放在你希望的任何位置。并允许在任何方向上观察场景,确定视图变换就像在场景中放置观察者并让它指向某一个方向;

从大局上考虑,在应用任何其他模型变换之煎,必须先应用视图变换:,这样做是因为,对于视觉坐标系而言,初因变换移动了当前的工作的坐标系,信续的变化都会基于新调整的坐标系进行。