OpenGL 入门 7:坐标系统

概述

  1. 局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标。

  1. 下一步是将局部坐标变换为世界空间坐标,世界空间坐标是处于一个更大的空间范围的。这些坐标相对于世界的全局原点,它们会和其它物体一起相对于世界的原点进行摆放。

  1. 接下来我们将世界坐标变换为观察空间坐标,使得每个坐标都是从摄像机或者说观察者的角度进行观察的。

  1. 坐标到达观察空间之后,我们需要将其投影到裁剪坐标。裁剪坐标会被处理至-1.0到1.0的范围内,并判断哪些顶点将会出现在屏幕上。

  1. 最后,我们将裁剪坐标变换为屏幕坐标,我们将使用一个叫做视口变换(Viewport Transform)的过程。视口变换将位于-1.0到1.0范围的坐标变换到由glViewport函数所定义的坐标范围内。最后变换出来的坐标将会送到光栅器,将其转化为片段。

右手坐标系(Right-handed System)

按照惯例,OpenGL是一个右手坐标系。简单来说,就是正x轴在你的右手边,正y轴朝上,而正z轴是朝向后方的。想象你的屏幕处于三个轴的中心,则正z轴穿过你的屏幕朝向你。坐标系画起来如下:

为了理解为什么被称为右手坐标系,按如下的步骤做:

  • 沿着正y轴方向伸出你的右臂,手指着上方。

  • 大拇指指向右方。

  • 食指指向上方。

  • 中指向下弯曲90度。

如果你的动作正确,那么你的大拇指指向正x轴方向,食指指向正y轴方向,中指指向正z轴方向。如果你用左臂来做这些动作,你会发现z轴的方向是相反的。这个叫做左手坐标系,它被DirectX广泛地使用。注意在标准化设备坐标系中OpenGL实际上使用的是左手坐标系(投影矩阵交换了左右手)。

Z缓冲区

当绘制多个有重叠的三角形时,若不考虑绘制顺序,必然导致成像出现问题。因此引入深度缓冲区,当片段输出它的颜色时,OpenGL会将它的深度值和z缓冲进行比较,然后如果当前的片段在其它片段之后它将会被丢弃,然后重写,这个过程称为深度测试(Depth Testing)。

用一句话说就是:深度缓冲区的作用就是区分颜色所在的层次,防止把被遮挡住的颜色显示出来

然而,深度测试是默认关闭的,我们需要手动开启它,如下:

  • glEnable(GL_DEPTH_TEST):glEnable和glDisable函数允许我们开启或关闭某一个OpenGL的功能。该功能会一直保持开启或关闭的状态,直到另一个调用来关闭或开启它

  • 还记得之前讲的 glClear() 方法嘛,可以通过 glClear(GL_DEPTH_BUFFER_BIT) 将所有像素的深度值设置为最大值,我们每次绘制必须要用其来清除深度缓冲区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值