Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >OpenGL(五)-- OpenGL中矩阵的变换OpenGL(五)-- OpenGL中矩阵的变换

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

作者头像
用户8893176
发布于 2021-08-09 06:33:42
发布于 2021-08-09 06:33:42
2.4K00
代码可运行
举报
文章被收录于专栏:小黑娃Henry小黑娃Henry
运行总次数: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中矩阵的计算方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 矩阵计算
m3dMatrixMultiply44(ModelViewMatrix(模型视图矩阵),ViewMatrix(观察者矩阵), ModelMatrix(模型矩阵));
  • 上述方式是通过API直接完成计算。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//几何变换的管道
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)的乘积,从而得到视图坐标系。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/7/10 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实验6 OpenGL模型视图变换
  (1)阅读教材有关三维图形变换原理,运行示范实验代码,掌握OPENGL程序三维图形变换的方法;   (2)阅读实验原理,运行示范实验代码,理解掌握OpenGL程序的模型视图变换。   (3)请分别调整观察变换矩阵、模型变换矩阵和投影变换矩阵的参数,观察变换结果;   (4)掌握三维观察流程、观察坐标系的确定、世界坐标系与观察坐标系之间的转换、平行投影和透视投影的特点,观察空间与规范化观察空间的概念。理解OpenGL图形库下视点函数、正交投影函数、透视投影函数。理解三维图形显示与观察代码实例。
步行者08
2020/10/27
2.1K0
实验6  OpenGL模型视图变换
OpenGL矩阵变换的数学推导
说起OpenGL的矩阵变换,我是之前在我们的项目天天P图、布丁相机中开发3D效果时才比较深入地研究了其中的原理,一直想写这篇文章,由于很忙(lǎn),拖了很久,再不写我自己也要忘了。 一开始时,也只是知道怎么去用这些矩阵,却不知道这些矩阵是怎么得来的,当出现一些莫名其妙的问题时,如果不了解其中的原理,就不知道如何解决,于是想彻底搞懂其中的原理,还好自己对数学挺有兴趣,于是从头到尾把推导过程研究了一遍,总算掌握了其中的奥秘,不得不佩服OpengGL的设计者,其中的数学变换过程令人陶醉,下面我们一起来看看。 这
天天P图攻城狮
2023/04/10
1.2K0
OpenGL矩阵变换的数学推导
OpenGL矩阵变换的数学推导
说起OpenGL的矩阵变换,我是之前在我们的项目天天P图、布丁相机中开发3D效果时才比较深入地研究了其中的原理,当时一开始时,也只是知道怎么去用这些矩阵,却不知道这些矩阵是怎么得来的,当出现一些莫名其妙的问题时,如果不了解其中的原理,就不知道如何解决,于是想彻底搞懂其中的原理,还好自己对数学挺有兴趣,于是从头到尾把推导过程研究了一遍,总算掌握了其中的奥秘,不得不佩服OpengGL的设计者,其中的数学变换过程令人陶醉,下面我们一起来看看。 这些矩阵当中最重要的就是模型矩阵(Model Matrix)、视图矩阵(View Matrix)、投影矩阵(Projection Matrix),本文也只分析这3个矩阵的数学推导过程。这三个矩阵的计算OpenGL的API都为我们封装好了,我们在实际开发时,只需要给API传对应的参数就能得到这些矩阵,下面带大家来看看究竟是怎样计算得到的。
腾讯Bugly
2019/01/30
6.6K2
OpenGL矩阵变换的数学推导
附加实验2 OpenGL变换综合练习
理解掌握OpenGL程序的投影变换,能正确使用投影变换函数,实现正投影与透视投影。
步行者08
2018/10/09
1.4K0
WebGL简易教程(五):图形变换(模型、视图、投影变换)
通过之前的教程,对WebGL中可编程渲染管线的流程有了一定的认识。但是只有前面的知识还不足以绘制真正的三维场景,可以发现之前我们绘制的点、三角形的坐标都是[-1,1]之间,Z值的坐标都是采用的默认0值,而一般的三维场景都是很复杂的三维坐标。为了在二维视图中绘制复杂的三维场景,需要进行相应的的图形变换;这一篇教程,就是详细讲解WebGL的图形变换的过程,这个过程同样也适合OpenGL/OpenGL ES,甚至其他3D图形接口。
charlee44
2019/10/08
2.9K0
WebGL简易教程(五):图形变换(模型、视图、投影变换)
OpenGL ES-3D图形变换知识
最近一段时间很忙,没什么时间再去研究OpenGL,有朋友问我OpenGL ES图形变换的相关问题,这里抽出时间整理一下相关资料,便于大家学习3D图形运动的知识。 (ps:有朋友以为我去腾讯云+社区写博客去了,这里说明一下,没有换平台写博客,只是加入了腾讯的云+社区分享计划,这里写的文章会自动同步到腾讯云+社区,有腾讯云+社区的朋友也可关注我) 一.坐标系统 OpenGL希望在所有顶点着色器运行后,所有我们可见的顶点都变为标准化设备坐标(Normalized Device Coordinate, NDC)。
清墨
2018/07/04
9730
iOS开发-OpenGL ES入门教程3
教程 OpenGL ES入门教程1-Tutorial01-GLKit OpenGL ES入门教程2-Tutorial02-shader入门 这次是三维图形变换。 OpenGL ES系列教程在这里。
落影
2018/04/27
1.9K0
iOS开发-OpenGL ES入门教程3
终端图像处理系列 - OpenGL ES 2.0 - 3D基础(矩阵投影)
Overview 移动设备的屏幕是二维平面,要想把一个三维场景渲染在手机二维屏幕上,需要利用OpenGL中的矩阵投射,将三维空间中的点映射到二维平面上。三维矩阵的相关知识是学习OpenGL最重要的课程之一。 线性代数 学习OpenGL三维投射知识之前,我们得事先了解下一些基础的线性代数知识,如向量运算,矩阵运算。 向量运算 向量: 指一个同时具有大小和方向的几何对象,因常常以箭头符号表示以区别于其它量而得名。 向量加减 向量的加(减)法定义是分量的相加(减),即将一个向量中的每一个分量加上(减去)另一个向量
天天P图攻城狮
2018/02/02
2.5K0
终端图像处理系列 - OpenGL ES 2.0 - 3D基础(矩阵投影)
模型矩阵、视图矩阵、投影矩阵
模型视图投影矩阵的作用,就是将顶点从局部坐标系转化到规范立方体(Canonical View Volnme)中。总而言之,模型视图投影矩阵=投影矩阵×视图矩阵×模型矩阵,模型矩阵将顶点从局部坐标系转化到世界坐标系中,视图矩阵将顶点从世界坐标系转化到视图坐标系下,而投影矩阵将顶点从视图坐标系转化到规范立方体中。
全栈程序员站长
2022/08/27
2.3K0
[OpenGL]OpenGL坐标系及坐标转换
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ouyangshima/article/details/25135009
用户1148525
2019/06/11
4.3K0
OpenGL中的投影使用
在OpenGL中,投影矩阵指定了可视区域的大小和形状。对于正投影与透视投影这两种不同的投影类型,它们分别有各自的用途。
全栈程序员站长
2022/07/12
8600
OpenGL中的投影使用
实验5 OpenGL模型视图变换
2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它(物体运动,让人看它的不同部分)。(模型变换)
步行者08
2018/10/09
1.7K0
​OpenGL 学习系列---坐标系统
在前面绘制基本图形中,遇到了很明显的问题,圆形不像圆形,正多边形不像正多边形?就像下面图形一样:
音视频开发进阶
2019/07/25
1.4K0
OpenGL-投影和摄像机
本文介绍了从相机内外参数的标定、立体匹配、多视几何、投影映射、体渲染等多个方面,系统地讲解了移动设备GPU上基于光线的3D渲染从输入到输出的整个过程。同时,通过实例介绍了在移动端GPU上实现这些算法的具体实现方式和优化策略,包括Vulkan、Metal、OpenGL ES、WebGL等多种平台上的实现。本文旨在帮助读者了解3D渲染技术的基本原理,以及在移动端GPU上实现这些算法的具体实现方式和优化策略,包括Vulkan、Metal、OpenGL ES、WebGL等多种平台上的实现。
MelonTeam
2018/01/08
3.3K0
OpenGL-投影和摄像机
实验4 二维几何变换
根据示范代码1,使用OpenGL平移、旋转、缩放变换函数来改写代码实现所要求的功能。示范代码1的代码运行结果为图1。
步行者08
2019/02/25
1.1K0
opengl投影矩阵变换_opengl 坐标
A computer monitor is a 2D surface. A 3D scene rendered by OpenGL must be projected onto the computer screen as a 2D image. GL_PROJECTION matrix is used for this projection transformation. First, it transforms all vertex data from the eye coordinates to the clip coordinates. Then, these clip coordinates are also transformed to the normalized device coordinates (NDC) by dividing with w component of the clip coordinates.
全栈程序员站长
2022/11/04
1.8K0
opengl投影矩阵变换_opengl 坐标
OpenGL学习笔记 (三)- 坐标系与顶点变换
在OpenGL学习笔记 (二)- 顶点与绘制指令中,已经对绘制指令与顶点规范进行了简单介绍,接下来的学习笔记将按照渲染管线的顺序继续说明。本节学习笔记将会介绍顶点数据在渲染管线中经过的第一步,也就是顶点着色器相关的操作。
KAAAsS
2022/01/14
4.1K0
OpenGL学习笔记 (三)- 坐标系与顶点变换
写给 python 程序员的 OpenGL 教程
OpenGL 是 Open Graphics Library 的简写,意为“开放式图形库”,是用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口(API)。OpenGL 不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。C / C++ / python / java 都可以很好支持 OpengGL,我当然习惯性选择 python 语言。
全栈程序员站长
2022/07/22
3.4K0
写给 python 程序员的 OpenGL 教程
万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
【编者按】OpenGL(开放式图形库),用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口,C、C++、Python、Java等语言都能支持 OpenGL。本文作者以 Python 语法为例,用两万字详解 OpenGL 的理论知识、用法与实际操作,干货满满,一起来看看吧。
AI科技大本营
2019/12/02
9.6K0
万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
OpenGL ES 2.0 (iOS)[04]:坐标空间 与 OpenGL ES 2 3D空间
第一次变换 模型变换(Model Transforms):就是指从模型空间转换到世界空间的过程
半纸渊
2018/09/04
1.8K0
OpenGL ES 2.0 (iOS)[04]:坐标空间 与 OpenGL ES 2 3D空间
相关推荐
实验6 OpenGL模型视图变换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验