【问题标题】:OpenGL: How can I change my coordinate setup?OpenGL:如何更改我的坐标设置?
【发布时间】:2017-03-13 18:41:31
【问题描述】:

据我了解,OpenGL 使用右手坐标系,至少在剪辑空间中,它的工作方式如下:

  • X 点向右
  • Y 向上
  • Z 点进入屏幕

这意味着,无需对用于变换的所有矩阵进行任何修改,世界空间坐标的工作方式如下:

  • X-Z 平面是水平的
  • X-Y 和 Z-Y 平面是垂直的

如果我想改变它以使 Z 轴指向上方怎么办?我怎么能这样做呢?我考虑过将所有矩阵乘以一个旋转矩阵,该矩阵仅将所有坐标移动 90 度,或者一旦我将数据发送到 GPU,我可以更改向量的 Y 和 Z 分量,但这些看起来更像是解决方法而不是实际解决方案,并且如果对场景中的每个网格进行处理,它们也可能会影响性能。有没有标准的方法来做到这一点?我是不是搞错了?

【问题讨论】:

  • 您可以在其上乘以一个 Rotationmatrix。
  • 你试过gamedev.stackexchange.com/questions/28434/…吗?同样是迂腐的,+Z 在右手系统中指向屏幕外。尽管 OpenGL 在 NDC 空间中是左撇子(与您的要点相匹配)。
  • @ssell 谢谢你的链接,这正是我想要的。

标签: opengl


【解决方案1】:

剪辑和 NDC 空间是左手轴系统,而不是您定义的每个 X、Y、Z 轴。

您可以有多个轴系。例如,一些“对象存储”使用左手系统。如果你是从OpenGL开始的,试着把所有东西都设置在右手系统中,你会更容易理解。

您的对象通常在其自己的本地系统中定义(无论是否使用右手)。您将它们放置在“世界”矩阵中。你从相机位置看世界,这需要一个“视图”矩阵。然后你投射所有这些,另一个“proj”矩阵。
如您所见,矩阵无处不在。不要害怕他们。

从一个轴系转换到另一个轴系只是另一个矩阵。网络上有很多例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多