美文网首页
OpenGL基础变换

OpenGL基础变换

作者: LamSpeech | 来源:发表于2020-07-20 16:40 被阅读0次

OpenGL ⾥的基础变换

OpenGL中涉及的基础变化主要有以下5种:

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

视图变换

  • 视图变换是应⽤到场景中的第⼀种变换, 它⽤来确定场景中的有利位置。默认情况下,透视投影中位于原点(0,0,0),并沿着 z 轴负⽅向进⾏观察 (向显示器内部看过去)。
  • 视图变换将观察者放在希望的任何位置,并允许在任何⽅向上观察场景。确定视图变换就像在场景中放置观察者并让它指向某⼀个⽅向。
  • 从⼤局上考虑,在应⽤任何其他模型变换之前,必须先应⽤视图变换。-->截⾃ <OpenGL 超级宝典 第5版 > 第96⻚。
  • 上述做法是因为对于视觉坐标系⽽⾔,视图变换移动了当前的⼯作的坐标系,后续的变化都会基于新调整的坐标系进⾏。

模型变换

  • 模型变换就是通过旋转、缩放和平移等手段操纵模型本身并将对象移动到特定位置的过程。
  • 注意:模型变换的过程是有严格顺序的,我们通常使用矩阵叉乘来计算模型变换结果,由于矩阵的乘法不满足交换律这一定理,交换变换顺序最终会导致结果的南辕北辙。
  • 模型变换的两种观测方式:观察者动物体不动和观察者不动物体动。

常见模型变换方式

模型变换-平移
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);

投影变换

  • 透视投影:屏幕上显示的物体与实物间的关系符合远小近大原则,接近现实生活中的视觉效果。设置API:
void SetPerspective(float fFov, float fAspect, float fNear, float fFar)
  • 正投影:屏幕上显示的物体与实物比例 1:1,大小一样的视觉效果效果。设置API:
void SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax)

矩阵堆栈的使用

OpenGL中使用GLMatrixStack来表示一个矩阵,矩阵最大长度为64,矩阵严格遵循先进后出原则。

类型
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
在堆栈顶部载⼊⼀个单元矩阵
void GLMatrixStack::LoadIdentity(void);
在堆栈顶部载⼊任何矩阵
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
矩阵乘以矩阵堆栈顶部矩阵,相乘结果存储到堆栈的顶部
void GLMatrixStack::MultMatrix(const M3DMatrix44f);
获取矩阵堆栈顶部的值
const 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);

矩阵堆栈入栈、相乘、出栈流程

入栈、相乘、出栈流程
  • 原始矩阵堆栈中,拷贝一份栈顶矩阵,压入栈顶
  • 当有变换操作时,将变换操作的矩阵与矩阵堆栈栈顶相乘,将其结果覆盖栈顶矩阵
  • 如果还有其他矩阵入栈,则继续相乘
  • 当没有矩阵需要push,即图形绘制完成后,需要pop栈顶矩阵
  • push与pop需要一一对相应,用了几个push,就需要几个pop,最终的矩阵仍然是最初时的矩阵

相关文章

  • OpenGL基础变换

    OpenGL ⾥的基础变换 OpenGL中涉及的基础变化主要有以下5种: 变换解释视图变换指定观察者位置模型变换在...

  • OpenGL基础变换

    1. 视觉坐标 视觉可以理解为屏幕坐标。是一个虚拟的固定的坐标系。 2. 视图变换 视图变化是当观察者移动位置时视...

  • OpenGL基础变换

    本章的主要目的是通过修改键盘是的上下左右键,来旋转点、线、三角形,观察形状的变化。 ——视角不动,物体动openg...

  • OpenGL基础变换

    1.理解变换 变换应用视图指定观察者或照相机的位置模型在场景中移动物体模型视图描述视图和模型变换的二元性投影改变视...

  • OpenGL基础变换

    第四章 OpenGL基础变换 向量和矩阵 在第三章,我们讨论了如何绘制3D点、线和三角形。为了将一系列图形转换到连...

  • OpenGL基础变换

    第四章 OpenGL基础变换 向量和矩阵 在第三章,我们讨论了如何绘制3D点、线和三角形。为了将一系列图形转换到连...

  • 五、OpenGL - 基础变换

    向量 向量:既有大小又有方向的量,在3D笛卡尔坐标系中,一个顶点就可以表示向量(x,y,z) 标量:只有大小没有方...

  • 七、OpenGL中的基础变换和矩阵堆栈

    基础变换 OpenGL中设计的变换主要有以下几种: 变换说明视图变换指定观察者位置模型变换在场景中移动物体模型视图...

  • 九、OpenGL 基础变化与矩阵堆栈

    基础变化 OpenGL中涉及的基础变化主要有以下5种 变换说明视图变换指定观察者位置模型变换在场景中移动物体模型视...

  • 七、OpenGL 基础变化与矩阵堆栈

    基础变化 OpenGL中涉及的基础变化主要有以下5种 变换说明视图变换指定观察者位置模型变换在场景中移动物体模型视...

网友评论

      本文标题:OpenGL基础变换

      本文链接:https://www.haomeiwen.com/subject/uhqykktx.html