OpenGL-ES 学习(4)---- OpenGL-ES 坐标体系

OpenGL-ES中的坐标系统转换与矩阵变换详解,
本文详细介绍了OpenGL-ES中的五个关键坐标系统:局部空间、世界空间、观察空间、裁剪空间和屏幕空间。重点讲解了如何通过模型矩阵、观察矩阵和投影矩阵进行坐标变换,以及透视除法在裁剪空间和标准化设备坐标间的应用。

坐标体系

我们知道 OpenGL -ES 坐标系中每个顶点的 x,y,z 坐标都应该在 -1.0 到 1.0 之间,超出这个坐标范围的顶点都将不可见。
将一个物体(图像)渲染到屏幕上,通常经过将物体坐标转换为标准化设备坐标,然后再将标准化设备坐标转化为屏幕坐标的过程。
(将物体坐标转换为标准化设备坐标,再将标准化设备坐标转换为屏幕坐标的过程)

该过程通常涉及多个坐标系统的变换,将所有顶点转换为片段之前,顶点需要处于不同的坐标系统进行计算,对我们来说比较重要的有 5 个坐标系统:

  • 局部空间(Local Space)
  • 世界空间(World Space)
  • 观察空间(View Space)
  • 裁剪空间(Clip Space)
  • 屏幕空间(Screen Space)

five_space

局部空间

局部空间 (Local Space) 是指对象所在的坐标空间,坐标原点由你自己指定,模型的所有顶点相对于你的对象来说都是局部的

局部坐标系空间是指物体所在的坐标系空间,即对象最开始所在的地方。例如在一个建模软件中创建了一个立方体。创建的立方体的原点有可能位于(0, 0, 0),即便它有可能最后在程序中处于完全不同的位置。甚至有可能创建的所有模型都以(0, 0, 0)为初始位置,然而它们会最终出现在世界的不同位置。所以,模型的所有顶点都是在局部系空间中,它们相对于物体来说都是局部的。

对象相对于局部顶点的坐标,每个顶点都相对于自己的参考系。

世界空间

在世界空间(World Space)主要实现对象的平移、缩放、旋转变换,将它们放在我们指定的位置这些变换是通过模型矩阵(Model Matrix)实现的。

如果将局部空间的建模所有的物体导入到程序当中,它们有可能会全挤在世界的原点(0, 0, 0)上,这并不是想要的结果,理想状态下是为每一个物体定义一个位置,从而能在更大的世界当中放置它们。

世界空间中的坐标系正如其名:是指顶点相对于世界的坐标。物体的坐标将会从局部变换到世界空间;
该变换一般是由模型矩阵(Model Matrix)实现。模型矩阵是一种变换矩阵,
它能通过对物体进行位移、缩放、旋转来将它置于它本应该在的位置或朝向。
对物体的旋转,平移,缩放都是在世界空间内进行的。
在 C/C++ 中可以利用 GLM 构建模型矩阵:

glm::mat4 Model = glm::mat4(1.0f); //单位矩阵
Model = glm::scale(Model, glm::vec3(2.0f, 2.0f, 2.0f)); //缩放
Model = glm::rotate(Model, MATH_PI/2, glm
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值