【OpenGL】平移、旋转和缩放矩阵推导

平移

将点p(x,y,z)平移到p’(x’,y’,z’),在X轴、Y轴、Z轴三个方向上平移的距离分别为Tx,Ty,Tz,其中Tz为0(二维平面的平移),如图3.19所示。那么在坐标的对应分量上,直接加上这些T值,就可以确定p’的坐标了,如等式3.1所示。

比较等式3.5和等式3.1

这里第二个等式的右侧有常量项Tx,第一个等式没有,这意味着我们无法通过使用一个3X3的矩阵来表示平移。为了解决这个问题,我们可以使用一个4X4的矩阵,以及具有第四个分量(通常被设为1.0)的矢量。也就是说,我们假设点p的坐标为(x,y,z,1),平移以后的点p’的坐标为(x’,y’,z’,1),如等式3.8所示:

根据最后一个式子1=mx+ny+oz+p,很容易求出系数m=0,n=0,o=0,p=1。这些方程都有常数项d、h、l和p,看上去比较适合等式3.1(因为等式3.1中也有常数项)。等式3.1(平移)如下所示,我们将它与等式3.9进行比较:

比较x’,可知a=1,b=0,c=0,d=Tx;类似地,比较y’,可知e=0,f=1,g=0,h=Ty;比较z’,可知i=0,j=0,k=1,l=Tz。这样,你就可以写出来表示平移的矩阵,如等式3.10所示:

旋转
假设点p(x,y,z)绕Z轴旋转β角度以后变为了点p’(x’,y’,z’):首选旋转是绕Z轴进行的,所以z坐标不会变;在图3.22中,r是从原点到点p的距离,而α是X轴旋转到点p的角度。用这两个变量计算出点p的坐标,如等式3.2所示。


类似地,你可以使用r,α,β来表示点p’的坐标:

通过三角函数两角和公式

可得:

最后,将等式3.2代入上式,消除r和α,可得等式3.3。

通过等式3.4可得等式3.5

将等式3.5与等式3.3进行比较:

这样的话,如果设a=cosβ,b=-sinβ,c=0,那么这两个等式就完全相同了。在看y’:

这样的话,设d=sinβ,e=cosβ,f=0,这两个等式也就完全相同了。最后关于z’的等式更简单,设g=0,h=0,i=1即可。

将这些结果带入等式3.4中,得到等式3.7:

将旋转矩阵从一个3X3矩阵变为一个4X4矩阵,只需要将方程3.3和方程3.9比较一下即可。

例如,当你通过比较x’=xcosβ-ysinβ与x’=ax+by+cz+d时,可知a=cosβ,b=-sinβ,c=0,d=0。以此类推,求得y’和z’等式中的系数,最终得到4X4的旋转矩阵,如等式3.11所示:

缩放
仍然假设最初点p,经过缩放操作以后变成了p’。

假设在三个方向X轴,Y轴,Z轴的缩放因子Sx,Sy,Sz不相关,那么有:

将上式与等式3.9比较,可知缩放操作的变换矩阵:

【OpenGL】平移、旋转和缩放矩阵推导相关推荐

  1. 平移、旋转和缩放矩阵推导

    平移 将点p(x,y,z)平移到p'(x',y',z'),在X轴.Y轴.Z轴三个方向上平移的距离分别为Tx,Ty,Tz,其中Tz为0(二维平面的平移),如图3.19所示.那么在坐标的对应分量上,直接加 ...

  2. 坐标的平移,旋转,缩放矩阵

    1.二维坐标的平移,旋转.缩放矩阵 平移矩阵M: 1    0    0 0    1    0 dx  dy   1 D2 = D1*M 旋转矩阵M 设某点与原点连线和X轴夹角为b度,以原点为圆心, ...

  3. 3D坐标系中 点 的 平移、旋转和缩放

    基础概念 矩阵 一个m*n矩阵 是 一个m行.n列的矩形数组. 如果一个矩阵只包含单行 或 单列, 这样的矩阵 为 行矩阵或 列矩阵,又叫行向量或列向量 矩阵的乘法: 点 空间中的点,我们通常用一个 ...

  4. 三维空间中的几何变换-平移旋转缩放

    前言 前段时间由于项目需要,深入学习了下图形几何变换,主要是绕任意轴旋转部分(其他的已有一定基础),现记录学习笔记. 文章内容部分引用并参考了下面的博客: http://netclass.csu.ed ...

  5. Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊)

    Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊) 目录 Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊) 前言 简单的平移.旋转和放缩 其他元素的一些基本使用 qm ...

  6. 二维图形学的变换-平移、旋转、缩放 OpenGL

    这里实现的是多点画多边形,然后把这个多边形进行二维的变换. 首先,多点画多边形,为了方便起见,我直接调用了Opengl的库函数.其次,就是如何进行多边形的二维变换.在这里我有两种方法.第一种是直接根据 ...

  7. 三维坐标要建一个4*4的矩阵?平移 旋转 缩放

    移植不知道三维物体的旋转平移缩放和矩阵的关系.找到这篇文章借鉴一下. 转自:https://blog.csdn.net/ALLENJIAO/article/details/80348362 怎么平移一 ...

  8. 【计算机图形学】c++ OpenGL 二维变换(包括多边形绘制、平移、旋转及缩放)

    运行结果演示 源代码 // 二维变换.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include<GL/glut.h> #i ...

  9. 计算机图形与OpenGL学习五(二维几何变换1.平移、旋转、缩放)

    二维几何变换(平移.旋转.缩放) 本章涉及数学变换比较多,代码是次要的,数学理论可自己推导一下. [二维平移] 通过将二维量加到一个点的坐标上来生成一个新的坐标位置,可以实现一次平移.将平移距离加到原 ...

最新文章

  1. 3D视觉创新应用(三维重建)竞赛作品系列——多楼层室内环境下的三维几何重建
  2. Keras Bug 解决方法 Exception ignored in: bound method BaseSession.__del__ of
  3. 从PPT到Word,用Python轻松实现办公自动化
  4. 鸿蒙开发板能干什么,【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(中)...
  5. spring事务管理-xml配置aop事务(重点)
  6. mysql 随机update_MySQL随机查询数据与随机更新数据
  7. vue里实现同步执行方法_vue中的watch方法 实时同步存储数据
  8. 好看的UI商城源码已扫码无后门无加密
  9. ubuntu16.04下在TensorFlow中实现快速风格迁移
  10. ionic 幻灯指令 ion-slide-box
  11. tp3.2 URL模式
  12. EasyExcel导入Excel和导出Excel教程
  13. C4D中常用材质的创建与赋予
  14. GitHub上14个屌炸天的Java进阶教程、面试真题项目,建议收藏!
  15. 什么是智能DNS云解析?云解析如何实现智能解析效果?
  16. neo4j java 模糊搜索,Neo4j 使用cypher语言进行查询
  17. (附源码)计算机毕业设计SSM基于的楼盘销售系统的设计与实现
  18. Chrome HackBar工具下载
  19. 操作系统第五章——进程同步
  20. Maven安装与配置详解、多镜像节点的配置

热门文章

  1. Codeup墓地-1133
  2. view的生命周期(实训)
  3. Android常用的shape,selector,layer-list使用说明
  4. windows下安装 M2Crypto
  5. 携引擎以令天下”:JavaScript从前端到全端的逆袭之路
  6. storyline发布方法_Articulate_Storyline入门教程.pdf
  7. Articulate Studio课间制作工具
  8. Fortran三种数组传递方式
  9. Ubuntu 12.04输入法图标不见了
  10. 简述你对计算机科学导论的看法,计算机科学导论 第二次作业-答案