持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
- 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 中的 模型变化的内容:
模型变化
模型变换:用于操纵模型与其中某特定变换.这些变换将对象移动到需要的位置 。通过旋 转,缩放,平移。
- 平移:图中对象沿着给定的轴进行移动
void m3dTranslationMatrix44(M3DMatrix44f m, floata x, float y, float z);
- 旋转变换:图中对象围绕一条坐标轴进行旋转
m3dRotationMatrix44(m3dDegToRad(45.0), floata x, float y, float z);
- 缩放:图中对象的大小进行了指定数量的放大或者缩小
void m3dScaleMatrix44(M3DMatrix44f m, floata xScale, float yScale, float zScale);
综合变换
void m3dMatrixMultiply44(M3DMatrix44f product, const M3DMatrix44f a, const M3DMatrix44f b);
矩阵堆栈使用
//类型
GLMatrixStack: :GLMatrixStack(int iStackDepth = 64) ;
//在堆栈顶部载入一个单元矩阵
void GLMatrixStack: : LoadIdentity(void);
//在堆栈顶页部载入任何矩阵
//参数:4*4矩阵
void GLMatrixstack:: LoadMatrix (const M3DMatrix44f m);
//矩阵乘以矩阵堆栈顶部矩阵,相乘结果存储到堆栈的顶部
void GLMatrixStack: :MultMatrix(const M3DMatrix44f) :
//获取矩阵堆栈顶部的值 GetMatrix 函数
//为了适应GLShaderMananger的使用,或者获取顶部矩阵的副本
cost M3DMatrix44f & GLMatrixStack::GetMatrix(void);
void GLMatrixStack: : GetMatrix(M3DMatrix44f mMatrix);
//将当前矩阵压入堆栈(栈顶矩阵copy一份到栈顶)
void GLMatrixstack:: PushMatrix (void);
//将M3DMatrix44f 矩阵对象压入当前矩阵堆栈
void pushMatrix(const M3DMatrix44f mMatrix);
//将GLFame 对象压入矩阵对象
void PushMatrix(GLFame &frame) ;
//出栈(出栈指的是移除顶部的矩阵对象)
void GLMatrixStack: : PopMatrix(void);
仿射变换
Rotate 函数angle参数是传递的度数,而不是弧度
void MatrixStack: :Rotate (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
void MatrixStack: : Translate (GLfloat x, GLfloat y, GLfloat z);
void MatrixStack: :Scale (GLfloat x, GLfloat y,GLfloat z);
使用照相机(摄像机)和 角色帧 进行移动
class GLFrame
{
protected:
M3DVector3f vorigin; // Where am I?
M3DVector3f vForward: // Where am I going?
M3DVector3f vUp; // which way is up?
}
GLFrame
//将堆栈的顶部压入任何矩阵
void GLMatrixStack: :LoadMatrix(GLFrame &frame) ;
//矩阵乘以矩阵堆栈顶部的矩阵。相乘结果存储在堆栈的顶部
void GLMatrixStack: : MultMatrix(GLFrame &frame) ;
//将当前的矩阵压栈
void GLMatrixStack: :PushMatrix(GLFrame &frame) ;
照相机管理
//GLFrame西数,这个函数用来检索条件适合的观察者矩阵
void GetCameraMatrix(M3DMatrix44f m, bool bRotationOnly = flase);