持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
- Swift Optional
- Swift Enum
- iOS开发 做一个三角形
- Swfit 指针类型
- Swift 属性(下)
- Swift 属性
- Swift 小结
- Swift 类与结构体(下)
- Swift 类的生命周期
- Swift 类的初始化器
- Swift 类与结构体
- OpenGL 压缩纹理
- OpenGL 隧道坐标计算
- 0penGL 像素格式及数据类型
- OpenGL 纹理对象
- OpenGL 纹理
- OpenGL 模型变化
- OpenGL 视图
- OpenGL 矩阵
- OpenGL 向量
- OpenGL 颜色混合
- OpenGL 深度测试的潜在风险
- OpenGL 浅析深度测试
- OpenGL 浅析隐藏面消除
- OpenGL 图元连接方式
- 记WKWebView与HTML完成交互两三事
- OpenGL 渲染流程图解析
- OpenGL 控制你的正方形
- OpenGL 专业名词解释
- OpenGL 环境搭建 - MacOS
上一节,我们总结整理了 OpenGL 中的矩阵的概念, 今天我们来看下 矩阵之间的计算 和 视图的变换。
单元矩阵 Matrix [线性代数角度]
在线性代数数学的维度,为了便于书写。所以坐标计算.都是从左往右顺序,进行计算。如下 列公式: 变换后顶点向量 = V_local * M_mode1 * M_view * M_pro 变换后顶点向量 = 顶点 × 模型矩阵 × 观察矩阵 × 投影矩阵;
单元矩阵 Matrix [Openfl角度]
在openGI 的维度 •如下列公式: 变换顶点向量 = M_pro * M_view * M_model * V_1oca1 变换顶点向量 = 投影矩阵 × 视图变换矩阵 × 模型矩阵 x 顶点
矩阵左乘
- 从栈顶获取栈顶矩阵 复制到 mTemp
- 将栈顶矩阵 mTemp 左乘 mMatrix
- 将结果放回栈顶空间里;
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) 时,就像在透视投影中一样。
视图变换将观察者放在你希望的任何位置。并允许在任何方向上观察场景,确定视图变换就像在场景中放置观察者并让它指向某一个方向;
从大局上考虑,在应用任何其他模型变换之煎,必须先应用视图变换:,这样做是因为,对于视觉坐标系而言,初因变换移动了当前的工作的坐标系,信续的变化都会基于新调整的坐标系进行。