【问题标题】:Confusion regarding OpenGL coordinate systems关于OpenGL坐标系的困惑
【发布时间】:2012-11-17 22:35:08
【问题描述】:

我无法理解 OpenGL 中空间的核心概念。几周以来,我一直在阅读一本关于现代 3D 图形的在线书籍,我经常发现自己对程序中使用的所有空间感到困惑。具体来说,空间如:模型空间、世界空间、相机空间、剪辑空间。我似乎无法理解我应该将矩阵转换为的顺序,这是我的一个教程程序中的一个示例:

//.vert shader of a program
#version 330

layout(location = 0) in vec4 position;

uniform mat4 cameraToClipMatrix;
uniform mat4 worldToCameraMatrix;
uniform mat4 modelToWorldMatrix;

void main()
{
    vec4 temp = modelToWorldMatrix * position;
    temp = worldToCameraMatrix * temp;
    gl_Position = cameraToClipMatrix * temp;
}

cameraToClip、worldToCamera、XtoY、ZtoQ,我怎样才能了解 OpenGL、网站中的这些空间?视频?参考?或者我应该回去重新阅读教程中这些空间的信息,直到它附着在我的脑海中。

【问题讨论】:

    标签: opengl matrix glsl hierarchy transformation


    【解决方案1】:

    我真的不知道如何解释它比我做得更好。尤其是当矩阵的名称尽可能清晰时。

    把矩阵想象成一个函数。函数有输入并返回一个值。您必须传递正确的输入,否则您的编译器会报错。

    考虑这些函数:

    Float intToFloat(Int i);
    Double floatToDouble(Float f);
    Real doubleToReal(Double d);
    

    其中IntFloatDoubleReal 是用户定义的 C++ 类型。

    假设我需要编写这个函数:

    Real intToReal(Int i);
    

    所以我只有一个Int。在上述函数中,恰好有一个函数我可以调用:intToFloat。这个名字说明了一切:它需要一个 int 并将其转换为 float。因此,给定一个Int唯一我可以用它做的事情就是调用intToFloat

    Int i = ...;
    Float f = intToFloat(i);
    

    好吧,现在我有一个Float。我只能调用一个函数:floatToDouble

    Double d = floatToDouble(d);
    

    这样,我只能打电话给doubleToReal。这意味着我们的intToReal 函数是:

    Real intToReal(Int i)
    {
      Int i = ...;
      Float f = intToFloat(i);
      Double d = floatToDouble(d);
      return doubleToReal(d);
    }
    

    就像矩阵的例子。

    顶点着色器所做的最重要的事情是将位置从其原始空间(称为模型空间)转换到 OpenGL 定义的称为剪辑空间的空间。这是大多数顶点着色器的工作#1。

    矩阵就像那些函数一样,将位置转换为中间空间。

    【讨论】:

      【解决方案2】:

      在这个问题解决之前,无法回答。对某些人来说足够好,让他们理解概念的东西,不会对每个人都有同样的效果。我最好的建议是在成为 3D 程序员之前先学习成为 3D 建模师。这就是我所做的。一旦您对数据的可视化非常熟悉,那么您就可以更轻松地形成心智模型,并牢记它们的编码。当您需要进一步的可视化来帮助您创建算法时,您将能够在不使用代码的情况下创建它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-02
        • 2012-08-18
        • 2019-05-17
        • 2020-03-06
        • 2016-03-16
        • 2013-07-27
        • 1970-01-01
        • 2012-09-20
        相关资源
        最近更新 更多