0
  1. COP和“相机”是一回事吗?这又指的是“用户”在看屏幕吗?
  2. 如果有的话,有人可以向我解释一下投影透视图和视口之间的关系吗?因为目前对我来说,它们似乎是同一件事。还是 PP 是窗口,然后缩放以适合视口?
  3. 在 OpenGL 中,当设置 gluPerspective 时,zNear 值是相机与投影透视图的距离,因此 fovy 和 zNear 的组合定义了窗口的大小(假设 Window == Projection Perspective 并且我不明白一些东西:/)进入世界。
  4. 创建窗口时(仅使用 gl 和 glu),在初始化所有内容后进入具有渲染功能的 while(!quit) 循环(这个问题有点傻),在所有情况下,所有内容都会在此渲染中绘制具有 glBegin() 和 glEnd() 的函数。让我们假设我有一个很大的世界,有很多功能等等。需要绘制的所有内容是否都适合这些函数,以便该 Render 函数可以及时变得非常大?
4

1 回答 1

4

COP和“相机”是一回事吗?这又指的是“用户”在看屏幕吗?

COP 可能意味着很多,但我认为您的意思是“投影中心”。在仿射投影的情况下,COP 确实在“相机”的位置。但是 OpenGL 没有摄像头,COP 通常位于原点。移动“相机”是通过与移动相机相反的方式移动整个世界来实现的。

如果有的话,有人可以向我解释一下投影透视图和视口之间的关系吗?

投影透视是一种连接到相机的“镜头”。您还可以使用完全不同的投影,其行为非常不同。

视口是投影边界“对齐”到的窗口部分。想象一下视口是您放置/缩放/拉伸渲染图片的窗口/屏幕的一部分(当然渲染直接发生在视口上)。

因为目前对我来说,它们似乎是同一件事。还是 PP 是窗口,然后缩放以适合视口?

更像是后者。

在 OpenGL 中,当设置 gluPerspective 时,zNear 值是相机与投影透视图的距离,因此 fovy 和 zNear 的组合定义了窗口的大小(假设 Window == Projection Perspective 并且我不明白一些东西:/)进入世界。

不完全的。投影体积由所谓的平截头体(您已切割其尖端的四面金字塔)定义。尖端位于原点,即一切都被投射到尖端。但是投影事物的平面是近平面。很容易看出,近平面应尽可能远离原点,而远平面应尽可能近。此外,两者必须具有相同的符号,否则事物会“通过”看起来错误的原点投影。

创建窗口时(仅使用 gl 和 glu),

您不能仅使用 OpenGL 和 GLU 创建窗口(GLU 不是 OpenGL BTW 的一部分!)。

在初始化所有输入的具有渲染函数的 while(!quit) 循环之后(这个问题有点傻),所有情况下的所有内容都在这个具有 glBegin() 和 glEnd() 的渲染函数中绘制。让我们假设我有一个很大的世界,有很多功能等等。需要绘制的所有内容是否都适合这些函数,以便该 Render 函数可以及时变得非常大?

好吧,OpenGL 不是场景图。正如您已经知道的那样,它是一个绘图 API。是的,应该在屏幕上显示的所有内容都必须放入绘图功能中。但是,您永远不会将场景直接放入代码中。您构建一些抽象数据结构,用来自外部源的数据填充这些数据结构,然后拥有一组渲染函数,这些函数遍历这些结构以决定要渲染的内容并进行正确的绘图调用。

顺便说一句:立即模式,即glBegin……glEnd自 OpenGL-2 以来已被弃用,取而代之的是顶点数组。请不要使用立即模式。只需跳过有关它的每一章和教程。

于 2012-07-05T09:16:21.230 回答