答案 0 :(得分:4)
COP可能意味着很多,但我认为你的意思是“投影中心”。在仿射投影的情况下,COP确实位于“相机”的位置。但是OpenGL没有摄像头,COP通常位于原点。移动“相机”是通过将整个世界移动到移动相机的方式来实现的。COP和“相机”是一回事吗?反过来又指的是看着屏幕的“用户”?
有人可以向我解释一下Projection Perspective和Viewport之间的关系吗?
投影透视是一种附加在相机上的“镜头”。您也可以使用完全不同的投影,其表现非常不同。
视口是投影边界“对齐”的窗口部分。想象一下,Viewport是窗口/屏幕的一部分,您可以在其上放置/缩放/拉伸渲染图片(当然,渲染直接发生在视口上)。
因为在我看来他们似乎是同一件事。或者PP是窗口,然后缩放以适合视口?
它更像是后者。
在OpenGL中设置gluPerspective时,zNear值是Camera与Projection Perspective的距离,因此fovy和zNear的组合定义了Window的大小(假设Window == the Projection Perspective并且我看不到某些东西:/)进入世界。
不完全。投影体积由所谓的平截头体(一种四边金字塔,其中已切割尖端)定义。尖端位于原点,即一切都朝向尖端投射。但投影事物的飞机是近平面。很容易看出,近平面应尽可能远离原点,尽可能远离平面。必须两者都有相同的符号,否则事情会通过看起来错误的原点“投射”。
创建窗口时(仅使用gl和glu),
你不能只用OpenGL和GLU创建一个窗口(GLU不是OpenGL BTW的一部分!)。
在你输入所有你输入的所有东西时(!quit)循环有一个渲染函数(这个问题有点傻),所有情况都会在这个渲染函数中绘制出来,它有glBegin()和glEnd( )。让我们假设我有一个有很多功能的大世界等等。是否需要绘制的所有内容都适合这些函数,以便此Render函数能够及时变得非常大?
嗯,OpenGL不是场景图。这是你已经想到的绘图API。是的,屏幕上的所有内容都必须放入绘图功能中。但是,您永远不会将场景直接放入代码中。您构建了一些抽象数据结构,您可以使用外部源中的数据填充这些数据结构,然后使用一组渲染函数来迭代这些结构来决定,渲染什么以及进行正确的绘制调用。
顺便说一句:立即模式,即glBegin
... glEnd
自OpenGL-2以来已被弃用,有利于Vertex Arrays。请不要使用立即模式。只需跳过关于它的每一章和教程。