OpenGL知识点梳理3----变换与坐标系统

变换

一、需要注意的一些点

1.变换矩阵不可变,其参数不能使用变量。

2.齐次坐标w>0表示真实物理世界中的点,w=0可用来统一表示一个无穷远的点。而实际应用中w=0常用来表示一个向量。

3.齐次坐标的优点是只需要管线最后做一次除法就能将齐次坐标转换为非齐次。

4.进行组合变换矩阵时,先缩放,再旋转,最后平移或移动到合适位置。

数学原因:矩阵的乘法不可交换

几何原因:若先位移再缩放,位移矩阵也会被缩放相同的倍数。

5.旋转总是相对于原点的,旋转和平移是不可交换的,从数学角度分析,即矩阵相乘的不可交换性

6.三维旋转的几何解释

任意三个正交向量U,V,W可构成一个三维空间中的旋转矩阵。当用这个矩阵去乘以一个点p时,结果为各个UP,VP,WP

正好为点乘结果,所以可看成将点映射到由UVW组成的新坐标系中。

7.如果物体上的某个位置可以表示成物体质心加上一个位移量,那么,旋转它等价于旋转质心然后
旋转这个位移。//此点仍然有疑问

二、常用的公式

1、由二维旋转推导出的旋转矩阵

x=rcos?    y=rsin? 
x′=rcos(θ+?)     y′=rsin(θ+?) 
通过三角函数展开得到 
x′=rcosθcos??rsinθsin? 
y′=rsinθcos?+rcosθsin? 
带入x和y表达式得到 
x′=xcosθ?ysinθ 
y′=xsinθ+ycosθ

写成矩阵的形式是:

此为基本公式,而在三维空间中围绕各个轴旋转也就是取一轴坐标不变,其余类似于二维旋转。

2.绕三轴旋转

绕X轴的旋转:

x′=x 
y′=ycosθ?zsinθ 
z′=ysinθ+zcosθ

绕Y轴旋转:

x′=zsinθ+xcosθ 
y′=y 
z′=zcosθ?xsinθ

绕Z轴旋转

坐标系统

裁剪空间

1.正射投影

此投影是不考虑透视效果的,所以投影结果会不真实,但是在一些工程学中会需要用到正射投影。

2.透视投影

考虑深度对投影的影响,所以进行透视除法,将分量都除以W从而得到越远越小的效果。

perspective(glm::radians(45.0f), (float)width/(float)height, 0.1f, 100.0f);

参数说明:第一个参数为fov(视野),第二个参数设置了宽高比,由视口的宽除以高所得。第三和第四个参数设置了平截头体的近和远平面。

所有在近平面和远平面内且处于平截头体内的顶点都会被渲染。

远近平面说明:近平面不可设置为0,远平面影响不大。近平面对深度分辨率更加敏感些。

摄像机

更新中。。。。

原文地址:https://www.cnblogs.com/jingrui/p/9638039.html

时间: 2024-10-04 18:15:30

OpenGL知识点梳理3----变换与坐标系统的相关文章

OpenGL中的空间变换

OpenGL中的空间变换 在使用OpenGL的三维虚拟程序中,当我们指定了模型的顶点之后,在屏幕上显示它们之前,一共会发生3种类型的变换:视图变换.模型变换.投影变换. 视图变换:指定观察者(摄像机)的位置: 模型变换:在场景中移动物体: 投影变换:改变可视区域的大小: 视口变换:这是一种伪变换,它对窗口上的最终输出进行缩放. 视觉坐标 它表示一种虚拟的固定坐标系统,通常作为一种参考系使用.它是根据观察者(摄像机)的角度而言的,与可能发生的变换无关.我们接下来所讨论的所有变换都是根据它们相对于视

jquery知识点梳理

jQuery知识点梳理 一.              jquery选择器 基本选择器 ID选择器 类选择器 标记选择器 分组选择器 通配符选择器 层次选择器 $(“ancestor descendent”):祖先后代选择器    空格 $(“parent > child”):父子选择器   大于 $(“prev + next”):相邻后兄弟元素选择器   加号 $(“prev ~ siblings”):所有后兄弟元素选择器  波浪线 过滤选择器:基本过滤选择器 :first.:last.:od

Javascript重要知识点梳理

Javascript重要知识点梳理 说明 Javascript流程控制 js中常用的数据类型 var关键字的使用 if – else if – else switch while for Javascript常用函数 1.  字符串函数 substring indexOf lastIndexOf charAt replace split toLowerCase toUpperCase 2.  数学运算函数 3.  数据类型转换函数 parseInt parseFloat Math.abs Mat

[独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Curs

[独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(八)常见Exception

[独孤九剑]Oracle知识点梳理(八)常见Exception

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Curs

[独孤九剑]Oracle知识点梳理(九)数据库常用对象之常见package

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Curs

[独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor [独孤九剑]Oracle知识点梳理(八)常见Exception

[独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor [独孤九剑]Oracle知识点梳理(八)常见Exception [独孤九剑]Oracle知识点梳理(九)数