首页
学习
活动
专区
工具
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.7K00

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

考虑一个物体绕任意的轴(而不是三个坐标轴)旋转,如:绕着过顶点(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倍。

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

    【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.9K01

    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.6K40

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

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

    4K110

    WebGL基础教程:第二部分

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

    1.4K30

    变换(Transform)(1)-向量、矩阵、坐标系与基本变换

    Unity中,模型空间和世界空间使用左手系;对于观察空间,则是右手系;对于观察空间,我们目视屏幕的方向一定是z轴,我们的右手边是x轴正方向;右手系则代表着z轴正方向是从屏幕指向了我们,z值越小代表着深度越大...叉积一个很常见的应用则是判断一个点是否在三角形内部:确定三角形的三个顶点坐标,分别记为 P1(x1, y1, z1), P2(x2, y2, z2), P3(x3, y3, z3)。...我们将纯位移、纯旋转和纯缩放的变换矩阵叫做基础变换矩阵,而能够表示全部变换的齐次坐标下的 矩阵则可以这样分解: 用于表示旋转和缩放, 用于表示平移, 是零矩阵平移对一个点进行平移变换:\begin...变换会原来的坐标系旋转注意下面提到3个矩阵的旋转将点绕x轴旋转 度:绕y轴旋转:\mathbf{R_y(\theta)} = \begin{bmatrix} \cos\theta & 0 & \...如果我们想让物体以某个点为中心,绕三个轴旋转,那么我们可以先向物体平移,使得旋转点与原点重合,再进行旋转。

    40910

    泊车必备 | 一文详解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旋转航偏角,需要注意的是坐标转换矩阵的连乘顺序为左乘。

    3.1K50

    【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 轴旋转

    61500

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

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

    2.6K100

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

    可以绕X轴,Y轴和Z轴旋转,所以一般都会有三个旋转矩阵。...以绕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.9K40

    图形中的线性代数

    由于叉乘的结果是向量,向量就涉及到了方向,我们一般用的是右手坐标系。手朝着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

    93310

    第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 当前的投影矩阵

    6.1K41

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

    (修改组件顺序) 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旋转。

    5K23

    「音视频直播技术」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轴旋转 累积距阵变换 前面已经学习了如何旋转、平移和缩放向量

    1.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.

    6K10

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

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

    4.8K161

    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.3K30
    领券