美文网首页
OpenGL(五)-- OpenGL中矩阵的变换

OpenGL(五)-- OpenGL中矩阵的变换

作者: Henry________ | 来源:发表于2020-07-10 18:25 被阅读0次

OpenGL(五)-- OpenGL中矩阵的变换

前言

照常提出几个问题,希望通过阅读可以找到答案。

  1. 对物体3维的2维投影进行位移,有几种方式?
  2. 模型视图矩阵代表了什么?

坐标系

前提:所说的坐标系都是基于3维空间的3维坐标.


1. 局部坐标系

图中LOCAL SPACE又称为本地坐标系。描述物体本身的顶点坐标。

2. 世界坐标系
  • WORLD SPACE称为世界坐标系,记录物体在坐标系中的位置;
  • 世界坐标系是由原点经过模型矩阵(Model Matrix)通过矩阵相乘变换得来的。
3. 视图坐标系
  • 在世界坐标系中观察者的位置不同,观察到的物体也会不同。目前物体还是处于3维坐标系中。
  • 视图坐标系是有世界坐标系经过观察者矩阵(View Matrix)通过矩阵相乘变换得来的。
4. 投影坐标系统
  • 3维图像最终显示是需要转换位2维图像才可以显示,及时的3d电影也是经过处理后的2维图像。可以想象在观察者和物体中间有一个画板,观察者最终看到的图像是在这个画板上的,这个画板的位置就是由投影矩阵来表示的。在这个画板上的图像才是可以用于显示的2d图像。
  • 通过对视图坐标系经过投影矩阵(Projection Matrix)通过矩阵相乘变换得来的。

通过模型矩阵,观察者矩阵(View Matrix),投影矩阵(Projection Matrix)三步矩阵变换后最终确定该展示怎样的图像。要注意的是矩阵的计算时从右往左的所以:
result = 投影矩阵 * 观察者矩阵 * 模型矩阵

物体旋转、平移变换

  • 具体可以想象移动的是物体的每一个点,在旋转之后物体的每一个点都的方向向量都会旋转,之后平移就会按照方向向量来进行移动
  • 先平移不会修改物体额方向向量,所以旋转就会得到不同的效果。

投影方式

上面提到了投影矩阵,其实投影矩阵分为:正投影,透视投影,下面就投影方式做一个解释.

1. 正投影
  • 正射投影(Orthographic Projection):矩阵定义了一个类似立方体的平截头体,指定了一个裁剪空间,每一个在这空间外面的顶点都会被裁剪。从而得到一个2d图像。
2. 透视投影
20181104204535641.png
  • 透视投影(Perspective Projection):它是从某个投射中心将物体从后往前投射到单一投影面(视口)上所得到的图形。透视图与人们观看物体时所产生的视觉效果非常接近。
  • 之前有提到过类似“画板”其实也是视口
  • 确立透视投影需要的参数: aspect(远/近裁切面的宽高比,它本身也是视口) , near(近裁切面位置) , far(远裁切面位置),投影角度,视口位置

以上图片都出自:_superhuihui-OpenGL中涉及到的矩阵变换

在OpenGL中矩阵的计算方式

// 矩阵计算
m3dMatrixMultiply44(ModelViewMatrix(模型视图矩阵),ViewMatrix(观察者矩阵), ModelMatrix(模型矩阵));
  • 上述方式是通过API直接完成计算。
//几何变换的管道
GLGeometryTransform transformPipeline;
transformPipeline.SetMatrixStacks(ModelViewMatrix(模型视图矩阵), ProjectionMatrix(投影矩阵));
//获得MVP
transformPipeline.GetModelViewProjectionMatrix()
  • 通过变换管道来完成计算,尤其是计算MVP数据时会使用这种方式,比较灵活。

如果想要了解具体矩阵是如何计算的:3D数学 矩阵知识

矩阵栈

在计算时会发现这种计算会导致物体唯一无法重置,为了解决这种问题OpenGL提出了矩阵栈的概念。栈这个概念应该是很熟悉了吧!原则:先进后出


以上图片出自:凡几多

简单阐述一下过程:

1. 压栈(PUSH操作)一个单元矩阵,初始化之后本身已近就存在一个单元矩阵。
通过Xcode来查看矩阵中的入内,需要变换为4行4列来看。
2. 拿出这单元矩阵和另一个矩阵相乘,就会得到一个新的矩阵(矩阵6)。
3. 使用矩阵6之后,将最上方矩阵出栈(POP操作)

仿射变换API

后序

将开始提出的2个问题做一个简单回答:

  1. 物体在3维空间位移,除了物体本身移动,还可以移动观察者。
  2. 模型视图矩阵代表:模型矩阵(Model Matrix)与观察者矩阵(View Matrix)的乘积,从而得到视图坐标系。

相关文章

  • OpenGL(五)-- OpenGL中矩阵的变换

    OpenGL(五)-- OpenGL中矩阵的变换 前言 照常提出几个问题,希望通过阅读可以找到答案。 对物体3维的...

  • OpenGL--向量和矩阵

    在我们OpenGL中涉及到图形变换的时候经常会运用到向量/矩阵的运算。今天我们就来了解下OpenGL中的向量、矩阵...

  • OpenGL(五)-矩阵变换

    关键函数讲解 平移 旋转 缩放 案例1 : 利用矩阵的平移、旋转、综合变化等, 实现矩阵的移动. 效果图: 注: ...

  • 音视频开发之旅(11) OpenGL ES矩阵变换与坐标系统

    目录 矩阵与矩阵变换 坐标系统 OpenGL的矩阵与矩阵变换 实践:平移、旋转、缩放、3D 资料 收获 一、矩阵与...

  • OpenGL-矩阵压栈出栈浅析

    OpenGL绘制图形需要经过变化才能达到用户目的,而变换是通过矩阵进行操作的。 OpenGL一般通过视图变换、模型...

  • OpenGL 矩阵变换

    视图变换 视图变换是指定观察者的位置,是应用到场景中的第一种变换,它用来确定场景中的有利位置。 在默认情况下,透视...

  • OpenGL(3) —— OpenGL 的矩阵变换

    基本计算 向量之间的计算有 点积、叉积。矩阵之间的计算有加减、数乘、矩阵间乘法。 矩阵的缩放 位移 旋转 一个向量...

  • OpenGL 向量 矩阵 变换

    向量 单位向量 标量:只有大小,例如:1,2,3...向量:既有大小又有方向。单位向量:向量长度(向量的模)为1的...

  • OpenGL基础变换

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

  • 七、OpenGL中的向量、矩阵、变换

    一、向量 1.概念 在3D笛卡尔坐标系,基本上一个顶点就是XYZ坐标空间上的一个位置,而在空间中给定的一个位置,恰...

网友评论

      本文标题:OpenGL(五)-- OpenGL中矩阵的变换

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