为了账号安全,请及时绑定邮箱和手机立即绑定

OpenGL坐标系是左手系还是右手系?

OpenGL坐标系是左手系还是右手系?

慕姐4208626 2019-12-09 14:31:19
我试图了解OpenGL坐标系。但是,有些教程说默认坐标系是左手的(请参见http://www.c-sharpcorner.com/UploadFile/jeradus/OpenGLBasics11172005014307AM/OpenGLBasics.aspx),而另一些教程则说它是右手的(请参见http:// www .falloutsoftware.com / tutorials / gl / gl0.htm)。哪个是正确的?我知道我们可以通过镜像将一个变换为另一个,但是我想知道默认坐标。
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

这里有些混乱。


在此处输入图片说明


OpenGL 在对象空间和世界空间中是惯用右手的。


但是在窗口空间(又称屏幕空间)中,我们突然左手了。


这是怎么发生的?


我们从右手到左手的方式是在glOrtho或glFrustum投影矩阵中输入负的z缩放比例。将z缩放为-1(同时保持x和y不变)具有更改坐标系的手性的效果。


对于glFrustum,


far和near应该是正数,far > near。说远 = 1000,近 = 1。然后C =-(1001)/(999)= -1.002。


有关更多详细信息和图表,请参见此处。


从正交角度看,glOrtho生成如下矩阵:


在此处输入图片说明


在此,left,right,bottom和top只是左垂直,右垂直,底部水平,顶部水平剪切平面(resp)的坐标。


在近及远的飞机,然而,在不同的规定。的邻近参数定义为


Near:到更近的深度裁剪平面的距离。如果平面要在查看器后面,则此距离为负。

远:


zFar 到更远的深度裁剪平面的距离。如果平面要在查看器后面,则此距离为负。

这里我们有一个典型的规范视图


典范


因为z乘数是(-2 /(far-near)),所以负号有效地将z缩放为-1。这意味着“ z” 在视图转换过程中是左旋的,这对于大多数人来说并不为人所知,因为他们只是在OpenGL中作为“右手”坐标系工作。


所以,如果你打电话


glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,

然后NEAR PLANE 在你前面10个单位。你在哪?为什么在原点处将x轴向右,将y轴置于头顶上,而将鼻子指向负z轴(这是默认设置,“默认情况下,摄像头位于原点,指向负z轴,并且具有(0,1,0)的向上矢量。“)。因此,近平面位于z = -10。远平面在您身后10个单位,z = + 10。


查看完整回答
反对 回复 2019-12-09
?
PIPIONE

TA贡献1829条经验 获得超9个赞

仅NDC

您应该只注意到OpenGL只知道NDC!那是左手坐标系。


无论您使用哪种坐标系-左手坐标系还是右手坐标轴坐标系-都需要镜像到NDC。如果愿意,您可以将世界空间完全作为左手坐标系处理。


为什么我们通常在世界空间中使用右手坐标系?

我认为这很传统。就是这样。也许它只是想区别于DirectX。


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 2386 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信