【问题标题】:the difference between glOrtho and glViewPort in openGL [duplicate]openGL中glOrtho和glViewPort之间的区别[重复]
【发布时间】:2014-07-02 18:19:26
【问题描述】:

我正在努力找出一些东西,比如说我正在渲染一些高度为 100,宽度为 100 的图像。

在场景 A

当 glOrthois 定义为 (left,right,bottom,top,zNear,zFar) 和 glViewPort 时,我正在使用 glOrtho(0,100,0,100,-100,100)glViewPort(0,0,50,50) as (左下角 x, 左下角 y, 宽度, 高度)。

在场景 B

我正在接受glOrtho(0,50,0,50,-100,100)glViewPort(0,0,100,100)glOrthois 定义为 (left,right,bottom,top,zNear,zFar) 并且 glViewPort 被定义 as (左下角 x, 左下角 y, 宽度, 高度)

这基本上意味着在场景 A 中,图像将被渲染到比它需要的更低的宽度和高度(即每两个像素渲染一次)。在原始图像中将映射到目标“表面”中的一个,但仍会看到整个图像。

然而,在场景 B 中,图像将被剪裁,因此只有左上角的四分之一可见。我对么? - 为了清楚起见,这是一个来自明天的 CG 测试的问题,我想确保我正确获得了 openGL...(已经阅读了 API...=\

【问题讨论】:

    标签: opengl graphics 3d opengl-1.x


    【解决方案1】:

    glViewPort 以屏幕像素为单位: 就是这样,它与显卡“内部”的 3D 世界无关。它只是告诉窗口的哪一部分将用于渲染(或者只是可见)。

    glOrtho 而是改变了“内部”世界并且是 OpenGL 单位: 更多的 OpenGL 单元将适合屏幕的可见部分,因此如果您增加正交大小,“更大”的对象将很容易适合可见区域。

    修改视口不会改变截锥体,实际上相同的图像只会被拉伸以适应新的视口。

    解释性图片:

    图一:视口是半个窗口

    图片 2:如果我只是将视口加倍,图像就会被拉伸(相同的平截头体填充不同的表面)

    因此,保持纵横比的唯一解决方案也是将正交尺寸加倍(在这种情况下,我将左右值加倍)

    图 3: 最终结果(请注意,现在可以看到更大的 3d 世界):

    更多详情请访问quite familiar site on OpenGL NeHe productions

    【讨论】:

      【解决方案2】:

      这两件事会影响 GL 坐标转换管道的不同阶段。 OpenGL 使用视锥体,它在标准化设备空间中是沿所有 3 个维度在 [-1,1] 范围内的立方体。 glOrtho() 调用通常用于设置投影矩阵,它将眼睛空间坐标转换为剪辑空间。 GL 将在内部从剪辑空间转换为 NDC。在正交情况下,您甚至可以假设剪辑空间和 NDC 是同一件事。视口描述了从 NDC 到窗口空间的转换,这是光栅化发生的地方。

      我说的对吗? - 为了清楚起见,这是一个来自 CG 测试的问题。 有明天,我想确保我正确获得了 openGL...

      对于案例 A,您可能正确。在案例 B 中,可能看到 底部左四分之一。但实际上,如果没有提供进一步的信息,这个问题是无法回答的。您说图像的“宽度”和“高度”为 100。通常,这些尺寸被解释为每个方向上的像素数。但在这种情况下,这个问题似乎暗示着与图像一起纹理化的 quad 以这样一种方式呈现,即它最终会出现在从 (0,0) 到 (100,100) 的眼睛空间中) (通过直接将其用作对象坐标,或通过使用另一个模型和/或视图变换)。也没有指定图像是如何映射的,即它可以旋转(这使得无法确定在场景 B 中看到图像的哪个部分有任何合理的信心)。

      另一件值得注意的事情是glOrtho()当前矩阵乘以正交投影矩阵。因此,如果该矩阵的初始状态未知,则无法说出最终的变换将是什么。

      我希望真正的测试不会包含这种指定错误的问题。

      【讨论】:

        猜你喜欢
        • 2014-08-16
        • 2011-04-08
        • 2012-11-24
        • 2013-06-05
        • 2021-09-29
        • 2020-05-27
        • 2016-03-23
        • 2012-08-11
        • 2012-11-24
        相关资源
        最近更新 更多