【问题标题】:Opengl transformations - perspective division confusionOpengl 转换 - 透视划分混淆
【发布时间】:2013-07-05 04:03:53
【问题描述】:

我正在尝试通过阅读 OpenGL Superbible 来学习一些 OpenGL 基础知识。

我在第 4 章的开头,我有一个关于转换的问题。

首先,相关链接:http://www.songho.ca/opengl/gl_transform.html

如果我理解这个管道(可以这么说)正确,如果在我的代码中我会有这样的东西

const float vertexPositions[] = {
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f,
};

这些坐标在所谓的对象空间坐标中,我可以将每个值指定为[-1,1] 范围内的某个值。

应用视图模型矩阵后,每个顶点坐标可以是任意数字,这些坐标将在所谓的眼睛坐标中。

在应用投影矩阵(无论是透视投影)后,我们在剪辑空间中,数字仍然可以有任何可能的值。

现在这是我想知道的一点。在此页面中,据说对于每个顶点x,y,z 坐标,我们将其除以第四个值w,这是因为我们使用齐次坐标系,并且在除法之后,x,y,z[-1,1] 范围内.

我的问题是,如何确定在所有这些转换之后w 的值就足够了,在将x,y,z 除以它之后,我们会得到[-1,1] 范围内的东西?

【问题讨论】:

    标签: opengl transformation


    【解决方案1】:

    …对象空间坐标,我可以将每个值指定为 [-1,1] 范围内的某个值。

    您不受对象坐标范围的限制。

    我的问题是,如何确定在所有这些转换之后 w 的值足够,在将 x,y,z 除以它之后,我们会得到范围 [-1,1] 的东西?

    范围 [-1, 1] 是转换后视口中的范围。该范围之外的所有内容都在视口之外,因此被剪裁了。没有什么可以确保这一点。如果东西在范围内,它们是可见的,如果不是,它们在视口窗口之外。

    【讨论】:

    • You're not limited in the range for object coordinates. - 很有趣,所以我在大多数教程中看到将坐标值指定为 [-1,1] 中的浮点数的原因只是一种约定?
    • @Andna:这主要是因为大多数教程都是从从模型空间到剪辑空间的身份转换开始的。因此,在第一个“Hello World of OpenGL”程序中,通过最简单的转换,某些东西变得可见,坐标必须在 [-1; 1]范围。然后,进一步的教程通常以此为基础,保留现有的几何图形以便熟悉。但这没有技术原因。
    • 感谢您为我澄清这一点。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多