服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - OpenGL ES 矩阵变换及其数学原理详解(五)

OpenGL ES 矩阵变换及其数学原理详解(五)

2022-02-24 15:34weiers Android

这篇文章主要为大家详细介绍了OpenGL ES 矩阵变换及其数学原理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

引子

  1. 向量刻画的是线性空间中的对象。
  2. 矩阵刻画的是向量在线性空间中的运动(变换,跃迁),相似矩阵本质上就是同一个线性变换的不同的描述。
  3. 在一个线性空间中,选定了一组基,对于任何一个线性变化都可以用一个确定的矩阵来描述
  4. 矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述,作为变换的矩阵,不但可以把线性空间中的一个点给变换到另一个点去,而且也能够把线性空间中的一个坐标系(基)表换到另一个坐标系(基)去。
  5. 当我们谈到向量时,一定要指定它所在的坐标系才有意义,比如向量b=(1,2,3)实际上指的是在单位坐标系I下有一个向量的度量为b。
  6. 就可以理解Ma=b就可以看成Ma=Ib,就是说在坐标系M中度量出来的向量a和在坐标系I里面度量出来的b实际上就是同一个向量。
  7. 对于矩阵而言,他表示出来的那个坐标系也是由一组基(向量)组成的,同样存在这组基实在哪个坐标系下度量的问题。对于矩阵M,将其理解成IM,即M中的那组向量是在I坐标系中得出的。
  8. MxN本质是声明了一个在M坐标系中量出的另一个坐标系N,其中M本身是在I坐标系中度量出来的。
  9. 对坐标系施加变换的方法,就是让表示那个坐标系的矩阵与表示那个变化的矩阵相乘。

因此我们来理解这样一个式子,ACb,AC为矩阵,b为一个向量

  • b是一个向量,他是在I坐标系下度量的,a = Cb也就是在I坐标系下将向量b变换到向量b,d=ACb=Aa的含义就是继续在I坐标系下将向量a变换到向量d。即在同一个坐标系I下面进行了两次变换操作。
  • 另一种理解方式是ACb=IACb,那么IAC三个矩阵相乘就表示了坐标系的变换,在I坐标系中度量处新的坐标系IA,再在IA坐标系下度量出IAC,然后这里最终的坐标系中的向量b和在1中在I坐标系中经过两次变换得到的向量是同一个向量。

上面的两种理解方式也揭示了对向量的变换和对坐标系的变换是等价的,这一点也可以通过后面旋转变换的图示中看出来。

各种变换

平移矩阵

OpenGL ES 矩阵变换及其数学原理详解(五)

缩放矩阵

OpenGL ES 矩阵变换及其数学原理详解(五)

平移矩阵和缩放矩阵很容易理解,并且从矩阵形式我们也可以看到为什么用四维的向量表示一个顶点了,除了w分量用来做透视除法以外,另一个作用不也正好是为了把平移整合进来吗,都做乘法而不做加法。在数学上也就是将三维空间的坐标表示成其齐次形式.

旋转变换

旋转变换相对来说较为复杂,对绕x、y或z轴旋转的情况比较好理解。

OpenGL ES 矩阵变换及其数学原理详解(五)

以绕z轴旋转为例

OpenGL ES 矩阵变换及其数学原理详解(五)

于是

OpenGL ES 矩阵变换及其数学原理详解(五)

写成矩阵形式为

OpenGL ES 矩阵变换及其数学原理详解(五)

绕任意轴旋转的旋转矩阵

OpenGL ES 矩阵变换及其数学原理详解(五)

同理,前面学到的正交投影矩阵,透视矩阵以及摄像机矩阵,本质上和上面的变换都是一样的。

前面可以看到一般传入渲染管线的是一个由摄像机矩阵,投影矩阵,变换矩阵相乘得到的总的变换矩阵,

在顶点着色器中一般是这样的形式

?
1
gl_Position = uMVPMatrix * vec4(aPosition,1);

上面的代码中的变量uMVPMatrix表示了模型(M)、视图(V)、投影(P)三中变换综合,

OpenGL ES 矩阵变换及其数学原理详解(五)

注意到矩阵乘法的顺序,对每个点所做的变换是有顺序的,对每个点先进行模型变换(平移缩放旋转)、再进行视图变换(摄像机视角)再进行投影变换,这三个变换顺序是不可变得,因为改变顺序最终看到的效果都是不一样的。

对每个点所做的综合变换本质上就是对这个点进行矩阵相乘,然而就我们传入的是最终的综合变换矩阵而言,刚才的理解不是特别准确,换个思路理解成综合变换矩阵就是对坐标系的变换会更好,因为毕竟我们是一次性将这个相乘后的综合矩阵传进去的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/cauchyweierstrass/article/details/52909609

延伸 · 阅读

精彩推荐
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6192021-03-27
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7452021-03-11
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810052021-05-03
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4642021-03-09
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9602022-03-02
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8342021-03-31
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4672021-01-03