首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )

1 , 则旋转 , 这里设置 z 旋转 30 度 ; // 矩阵旋转 // glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat...z); // 第 1 个参数是旋转角度 , 后面三个参数值代表是否旋转 , // 如果对应值设置为 1 , 则旋转 // 这里设置 z 旋转 30 度 glRotatef..., 后面三个参数值代表是否旋转 , // 如果对应值设置为 1 , 则旋转 // 这里设置 z 旋转 30 度 glRotatef(30.0f, 0.0f, 0.0f...(); // 将后缓冲区绘制到前台 SwapBuffers(dc); } 执行结果 : 三角形 z 旋转了 30 度 ; 五、矩阵平移变换 ---- 渲染时先设置单位矩阵 ,..., 后面三个参数值代表是否旋转 , // 如果对应值设置为 1 , 则旋转 // 这里设置 z 旋转 30 度 //glRotatef(30.0f, 0.0f,

3.4K00

模型矩阵、视图矩阵、投影矩阵

考虑一个物体任意(而不是三个坐标旋转,如:绕着过顶点(x, y, z)方向为(a, b, c)旋转角度θ。...这时可用多个变换叠加构建矩阵: 首先将顶点(x, y, z)平移到原点,X旋转角度p使指定旋转轴在x-z平面上,Y旋转角度q使指定旋转轴与Z重合,指定旋转轴(也就是z旋转角度θ,...Y旋转角度-q,X旋转角度-p,将顶点平移到向量(x,y,z)。...比如: 来看个具体例子:一个z匀速螺旋匀速上升立方体,在某一帧中(即在这一帧对应时刻t下),其向z正方向平移长度和z旋转角度分别为: 则模型矩阵(注意上文齐次坐标下基本变换矩阵)为...观察者Z旋转了角度θ,相当于整个世界Z旋转了-θ度。 观察者在三个方向等比例缩小了s倍,相当于整个世界等比例放大了s倍。

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )

模型视图矩阵进行 缩放 , 旋转 , 平移 操作时 , 先旋转再移动 , 与先移动再旋转 效果是不同 ; 矩阵具有叠加性 , 先移动再旋转 , 与先旋转再移动 , 最终模型视图矩阵值是不同 ;..., 后面三个参数值代表是否旋转 , // 如果对应值设置为 1 , 则旋转 // 这里设置 z 旋转 30 度 glRotatef(30.0f, 0.0f, 0.0f...(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); // 第 1 个参数是旋转角度 , 后面三个参数值代表是否旋转 , // 如果对应值设置为...1 , 则旋转 // 这里设置 z 旋转 30 度 glRotatef(30.0f, 0.0f, 0.0f, 1.0f); 效果 : 二、渲染前不设置单位阵 ---- 由上面的示例可知..., 后面三个参数值代表是否旋转 , // 如果对应值设置为 1 , 则旋转 // 这里设置 z 旋转 30 度 glRotatef(30.0f, 0.0f, 0.0f

1.8K00

glLoadIdentity()与glTranslatef()和glRotatef()--坐标变换

,左边矩阵称为平移变换矩阵,若把2、3、4换成x、y、z,则用它乘以一个齐次坐标表示向量,就可以将该向量平移(x,y,z). 旋转变换和缩放变换都像平移变换一样可用一个矩阵来表示。...把平移变换矩阵记为T(x,y,z),旋转变换矩阵记为R(s,x,y,z),表示向量(x,y,z)旋转s角度;把向量记为X。...现在要把一个点X,如(3,3,3,1),移动(2,2,2)单位,再y旋转30度角,用矩阵表示即R(0,1,0,30)*T(2,2,2)*X,可以理解为离X最近矩阵最先作用。...,然后X旋转,然后再按向量(-2.5f,0.0f,-10.0f)移动,最终得到就是把一个如下描述图形: ?...这个图形在旋转,可以看出是X旋转三角形,而所在位置有两次glTranslatef确定。

1.5K40

第4章-变换-4.1-基础变换

在三个维度上,常用旋转矩阵有 、 和 ,它们分别围绕x、yz旋转一个实体 弧度。...旋转矩阵 特征除了它i旋转 弧度这一事实之外,它还使所有留在旋转轴i上点不变。请注意, 也将用于表示围绕任何旋转旋转矩阵。...上面给出旋转矩阵用于一系列三个变换以执行任意旋转。此过程在第4.2.1节中讨论。4.2.4节介绍了直接任意旋转。 所有旋转矩阵行列式都是1并且是正交。...这也适用于任意数量这些变换级联。旋转矩阵还有另一种求逆方法: ,即同一轴向相反方向旋转。 示例:围绕一个点旋转。假设我们要围绕z将对象旋转 弧度,旋转中心是某个点 。...或者,要创建一个可以产生归一化结果正常变换矩阵,可以将原始矩阵 左上角除以这个比例因子一次。 请注意,在变换后,表面法线从三角形导出系统中,法线变换不是问题(例如,使用三角形边线叉积)。

3.9K110

WebGL基础教程:第二部分

移动 缩放 旋转 这些函数中每一个都可作用于X、YZ,因而组合得到9种基本变换。它们通过不同方式来影响3D对象4x4变换矩阵。...所以,如果你想让你对象在所有三个坐标上都变成两倍大,则你需要让第一个,第六个和第十一个元素都乘以2。 旋转 旋转是最难懂变换,因为旋转轴在三个坐标上时,旋转矩阵都不一样。...要实现一些高级动画,需要每一种变换可能都会多个。比如,如果你想让一扇门绞链转动,你会先移动门,让它绞链位于Y上,即在XZ上都为零。 然后,Y旋转,这样门就可以绞链转动了。...计数器counter变量用于填充三角形数组,因为.obj文件是按照顺序定义这些三角形。...Update函数让模型Y旋转,这是通过更新这个对象YRotation实现。 我模型对于WebGL来说还是大了一些,这不太好,所以我需要在代码中稍作调整。

1.4K30

泊车必备 | 一文详解AVM环视自标定

其中z为相机光轴,朝向相机正前方;x朝向相机右侧;y朝向正下方。因此x旋转为俯仰角,y旋转为航偏角,z旋转为滚转角。...相机z旋转(roll) 相机Z旋转与2.1节很像,为了更好地推导数学公式,我们先从上图这个角度来看相机坐标系。...第2章中我们得到了结论:我们通常说相机坐标系之间坐标转换矩阵 R ,实际上是相机坐标系表征矩阵逆 相机z旋转(roll) 图中点P在XYZ与xyz坐标系下坐标之间转换关系可以表示如下:...相机坐标系与道路坐标系转换关系可以理解成相机坐标系先x旋转某个pitch角度,再y旋转某个yaw角度,最后z旋转某个roll角度;也可以理解成先x旋转某个pitch角,再z旋转某个...实际上我们在基于消失点进行相机外参标定时用时如下组合: 上式物理意义是:相机先Z旋转roll翻滚角,然后X旋转pitch俯仰角,最后Y旋转航偏角,需要注意是坐标转换矩阵连乘顺序为左乘。

2.2K50

【OpenGL】二十二、OpenGL 光照效果 ( 模型准备 | 光照设置 | 启用光照 | 启用光源 | 设置光源位置 | 设置光照参数 | 设置环境光 | 设置反射材质 | 设置法线 )

、相关资源 一、模型准备 ---- 介绍光照前 , 先将模型准备好 , 绘制一个放平三角形 , 使三角形处于 xz 平面 , xy 平面指的是屏幕所在平面 , xz 平面的三角形只能看到一条线 ;..., z 分量 //glScalef(2.0f, 2.0f, 1.0f); // 矩阵旋转 // glRotatef (GLfloat angle, GLfloat x, GLfloat...y, GLfloat z); // 第 1 个参数是旋转角度 , 后面三个参数值代表是否旋转 , // 如果对应值设置为 1 , 则旋转 // 这里设置 z 旋转..., z 分量 //glScalef(2.0f, 2.0f, 1.0f); // 矩阵旋转 // glRotatef (GLfloat angle, GLfloat x, GLfloat...y, GLfloat z); // 第 1 个参数是旋转角度 , 后面三个参数值代表是否旋转 , // 如果对应值设置为 1 , 则旋转 // 这里设置 z 旋转

49600

OpenGL ES (iOS) 学习笔记 — 基础篇(一)

在OpenGL ES中,坐标系使用是笛卡尔坐标系,原点位于手机正中间,z指向手机外。 ? 顶点位置信息就是由这个坐标系来决定,坐标长度单位为1。手机宽度为2,高度也为2。...旋转矩阵相比于上面两个矩阵略微有些复杂,旋转包含两个重要元素,旋转角度,什么旋转旋转根据向量,通过右手旋转法则确定旋转方向。...**如何创建一个图形? 其实一个图形创建也是OpenGL渲染基本流程体现。 ? 从图中可以看出,最开始输入是顶点数据。比如三角形,就是三个点。...这样我们就利用OpenGL创建了一个三角形在界面上,而且还是有颜色。...以上是对OpenGL ES中Shader和2D世界创建图形介绍,后续将进入奇妙3D世界,学习OpenGL是如何描述3D世界中物体

2.4K100

WebGL简易教程(五):图形变换(模型、视图、投影变换)

可以X,YZ旋转,所以一般都会有三个旋转矩阵。...以Z旋转为例,在Z正半沿着Z负方向进行观察,如果看到物体是逆时针旋转,那么就是正旋转旋转方向就是正旋转值就是正数;反之如果旋转值为负数,说明旋转方向就是负,沿着顺时针旋转。...对于一个点p(x,y,z,1),Z旋转,因为旋转Z值不变,所以可以忽略Z变换,只考虑XY空间变化。此时设r为原点到点p距离,α是X旋转到该点角度。如图所示: ?...那么p点坐标表示为式(3): x=r*cosα\\ y=r*sinα\\ \end{cases} \tag{3} 同样Z旋转后,得到新点p’,X旋转到该点角度为(α+β),其坐标值为...综合运用 综上所述,模型矩阵M,视图矩阵V,投影矩阵P,同时作用于物体顶点,使得最终物体能后被看见或者进行UI操作。根据之前教程内容,逐顶点操作可以将其放入到顶点着色器。

2.6K40

图形中线性代数

由于叉乘结果是向量,向量就涉及到了方向,我们一般用是右手坐标系。手朝着x方向伸开,然后手指向y方向旋转,伸开大拇指指向方向就是z。如下图所示: image.png 那叉乘如何计算呢?...这时候再看下特征值分解: image.png R就是旋转,S是缩放。 这样A变换就可以看成是如下3步: 将特征向量旋转到x,y坐标,成为x,y方向标准向量。...(R转置乘以特征向量,结果就是单位向量) 按照特征值进行缩放 再将x,y坐标旋转特征向量方向 如下图所示: image.png 类似地看下奇异值分解:...3D线性变换 对于缩放和变形,区别不大,对于旋转会复杂一些,因为多了一个坐标,不过如果是绕着某个坐标旋转,其实还是和2D旋转类似: image.png image.png 如果需要任意一个向量旋转...这时候就可以将该向量旋转到标准坐标系某个上 执行旋转 4.乘以R装置,就可以再旋转第一步生成坐标系中 具体公式如下,这儿是将旋转向量旋转到了z上: image.png

87110

第4章-变换-4.2-特殊矩阵变换和运算

重要是要注意,欧拉角一些表示将z作为初始向上方向。这种差异纯粹是一种符号变化,尽管可能会令人困惑。在计算机图形学中,在如何看待世界以及如何形成内容方面存在分歧:y-up或z-up。...要将称为 输入变换限制为x旋转,只需使用本节中描述方法提取欧拉角 、 和 ,然后创建一个新矩阵 。...Shoemake[1635]改进了他们仿射矩阵技术,因为他算法独立于参考系,并尝试分解矩阵以获得刚体变换。 4.2.4 任意旋转 有时,将实体任意旋转某个角度过程是很方便。...假设旋转轴 已正则化,并且创建了一个围绕 旋转 弧度变换。 为此,我们首先变换到一个空间,其中我们想要旋转是x。这是通过一个称为 旋转矩阵完成。...无论采用哪种技术,这三个向量都用于创建旋转矩阵: image.png 该矩阵将向量 转换为x ,将 转换为y,将 转换为z

3.5K40

旋转矩阵(Rotation Matrix)推导及其应用

向量平移,比较简单。 缩放也较为简单 ? 矩阵如何进行计算呢?之前文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘。在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述很清晰了。 ?...v=8XRvpDhTJpw 有点P(Xa,Ya),当坐标由 x –> y 旋转 θ 度后,求该点在新坐标坐标是多少 ? ? ? ? 所以对于二维旋转来讲,旋转矩阵就是 ?...三维旋转,需要先搞清楚正、负方向(使用是右手法则,在二维平面增加一维z,它正方向朝向屏幕外)。 x进行旋转(在yz平面顺时针旋转) ? ? y进行旋转(在zx平面顺时针旋转) ? ?...z进行旋转(在xy平面顺时针旋转) ? ?...当前模型观察矩阵用于将顶点/方向矢量从模型空间变换到观察空间 UNITY_MATRIX_V 当前观察矩阵用于将顶点/方向矢量从世界空间变换到观察空间 UNITY_MATRIX_P 当前投影矩阵

5.5K41

基础渲染系列(一)图形学基石——矩阵

(修改组件顺序) 2.3 旋转 第三种变换类型是旋转。比前两个要困难一些。我们从一个新组件开始,该组件将返回没有变化点。 ? 那么旋转如何实现呢? 它需要限制自己单个Z旋转。...孤立地这些旋转实现就类似于Z旋转,但同时多个旋转则变得更加复杂。 为了解决这个问题,我们可以使用更好方法来写下旋转数学。 3.1 矩阵 从现在开始,我们将垂直而不是水平地写入点坐标。...3.2 3D旋转矩阵 到目前为止,我们有一个2 x 2矩阵,可用于Z旋转2D点。 但我们实际上使用是3D点。所以我们尝试乘法 ? , 因为矩阵行和列长度不匹配。...3.3 为X和Y做矩阵旋转 使用我们找到Z旋转相同方式,我们可以得出Y旋转矩阵。首先,X从 ? 开始,逆时针旋转90°后,变为 ? 。 这意味着旋转X可以用 ? 来表示。...3.4 统一旋转矩阵 我们三个旋转矩阵每个单个旋转。 为了将它们结合起来,我们必须一个接一个地应用。 让我们先Z旋转,然后Y旋转,最后X旋转

4.8K23

「音视频直播技术」OpenGL渲染之距阵变换

图像渲染过程 一般将一个3D图像显示在2D平面上需要三个步骤距阵变换,我们称之为MVP,即模型(Model), 观察(View)以及投影(Projection)。...模型:将要显示3D物体从模型坐标系变成世界坐标系。 观察:将3D物体从世界坐标系变换成从人眼角度看到物体坐标系。 投影:就是将3D坐标系换成2D坐标系。也就是3D物理如何在2D平面上展示。...z 代表深度,比如按右手坐标来说,离我们眼睛越远深度越深,z值也就越小。 w 是为了距阵做乘法运算而增加。 因此,我们在三维图形学中只用到4x4矩阵,它能对顶点(x,y,z,w)作变换。...依次类推,就得到了右边结果。 距阵平移 有个 4x4 距阵,如下: 平移距阵 其中,X、Y、Z是点位移增量。...距阵旋转 旋转矩阵比较复杂, X 旋转使用距阵: X旋转 Y 旋转使用距阵: Y旋转 Z 旋转使用距阵: Y旋转 累积距阵变换 前面已经学习了如何旋转、平移和缩放向量

1K20

three.js中矩阵变换(模型视图投影变换)

矩阵运算 2.2. 模型变换矩阵 2.2.1. 平移矩阵 2.2.2. 旋转矩阵 2.2.2.1. X旋转矩阵 2.2.2.2. Y旋转矩阵 2.2.2.3. Z旋转矩阵 2.3....X旋转矩阵 X旋转: plane.rotation.x = THREE.Math.degToRad(30); 对应旋转矩阵: \[\left[ \begin{matrix} 1 & 0...Y旋转矩阵 Y旋转: plane.rotation.y = THREE.Math.degToRad(30); 对应旋转矩阵: \[\left[ \begin{matrix} cosβ...Z旋转矩阵 Z旋转: plane.rotation.z = THREE.Math.degToRad(30); 对应旋转矩阵: \[\left[ \begin{matrix} cosβ...它逻辑应该是视图矩阵模型矩阵互为逆矩阵模型矩阵也可以称为世界矩阵,那么世界矩阵矩阵就是视图矩阵了。 3.

5.8K10

js调用原生API--陀螺仪和加速器

使用旋转矩阵 旋转矩阵是一个能用来表示我们设备在物理三维空间里旋转矩阵。要建立一个旋转矩阵,我们需要一种基于矩阵能分别表示x,y,z旋转方法。...基于上面我们讨论实际考虑,我们可以按照如下三步来为我们web应用创建一个合适旋转矩阵。...将欧拉角转换为旋转矩阵表示法 计算屏幕坐标系转化为我们旋转矩阵 计算世界坐标系转化为我们旋转矩阵(可选) 把它们组合起来计算出一个适应屏幕也适应世界旋转矩阵表达法 要把设备X旋转β度,我们可以用下面的要素旋转矩阵...要把设备Y旋转γ度,我们可以用下面的要素旋转矩阵: ? 要把设备Z旋转α度,我们可以用下面的要素旋转矩阵: ? 用来表示任意航空次序欧拉角结合旋转矩阵可以通过上述旋转矩阵相乘获得。...我们希望那些以前受困于不知如何在3D模型应用中使用这个APIweb开发者在读完本文后能更好理解设备方向并能将其应用于以后web应用中。

4.5K161

Gimbal Lock欧拉角死锁问题

技术背景 在前面几篇跟SETTLE约束算法相关文章(1, 2, 3)中,都涉及到了大量向量旋转问题--通过一个旋转矩阵,给定三个空间上欧拉角 \alpha, \beta, \gamma ,将指定向量对应进行旋转操作...,也就是先 Z 旋转,再 X 旋转,最后再 Y 旋转顺序。...换句话说,如果在一个欧拉角旋转矩阵中,在 X 方向将其旋转了90度之后,接下来不论是 Y 旋转,还是 Z 旋转,得到效果是一样。...首先我们给定一个这样Gimbal: 其中每一个颜色环都可以对应进行旋转,比如绿旋转旋转旋转: 有了这三个的话,不论怎么旋转,都可以保持中间那根棍子位置和朝向不变...,假定一个空间向量 \textbf{v}_0=i ,也就是处于三维坐标系X正方向上一个单位向量,我们给它设计一个路径:先Z旋转 \gamma 角度,然后X旋转90度,最后再Y旋转 \

1.2K30

Cesium入门之九:Cesium加载gltf文件

该类构造函数使用三个参数heading,pitch和roll来分别定义目标物体Y旋转角度(方位)、X旋转角度(俯仰)和Z旋转角度(滚转),并把它们存储在类实例中以供使用。...所有参数都是以弧度为单位浮点数,且值在-π到π之间。heading参数定义了Y旋转角度,以正北方向为0度。...pitch参数定义了物体X旋转角度,以水平位置为0度,向上旋转为正,向下旋转为负。roll参数定义了物体Z旋转角度,以输入旋转方向垂直方向为0度。...例如,以下代码创建了一个Y、X和Z分别旋转45度旋转状态: var heading = Cesium.Math.toRadians(45); var pitch = Cesium.Math.toRadians...第一个示例创建了一个默认旋转,并存储在quat1中。第二个示例中,使用了一个变换矩阵进行了固定坐标系旋转,结果被存储在quat2中。

1.7K30
领券