繁体   English   中英

OpenGl更改坐标系的度量单位

[英]OpenGl changing the unit of measure for coordinate system

我正在使用最新的蓝皮书学习OpenGL,希望能对此有所澄清。 该书说您可以将任何测量系统用于坐标系,但是在进行3D透视编程时,世界坐标为+ 1 / -1。

我想我有点困惑的地方是可以说我想用脚和英寸来表达我的世界,并且我想盖房子的内部。 我会只使用转换(x(feet),y(feet),z(feet)),其他功能,还是有一些功能可以更改x,y世界坐标(即将默认值从-1 / + 1更改为例如(-20/20)我知道openGl会将剩下的所有单位都转换。

因此,我想我最大的知识空白是如何为OPenGL建模真实的对象(长度)以使其有意义?

我认为作者指的是透视分割后出现的归一化坐标(设备坐标)。

通常,当您在OpenGL中实际操作对象时,使用的标准世界坐标不限于-1 / + 1。 这些世界坐标可以是您喜欢的任何东西,通过乘以模型视图和投影矩阵,然后除以齐次坐标“ w”,可以转换为归一化坐标。

OpenGL将为您完成所有这些工作(直到您进入着色器),因此不必担心标准化坐标。

好吧,它都是相对的。 如果将1个OpenGL单位设置为1米,然后在此基础上完美构建所有东西以进行缩放,那么您将拥有所需的比例(即10米将是10个openGL单位,而1毫米将是0.001个OpenGL单位。

但是,如果要引入一个设计为1 OpenGL单位= 1英尺的模型,则该对象最终将变得太大〜3倍。

当然,您可以在各种方法之间进行更改,但是到目前为止,最好的方法是在将模型加载到引擎之前重新缩放模型。

…但是,在进行3D透视编程时,世界坐标为+ 1 / -1。

谁说的? 也许您指的是剪辑空间,但是这只是一个特殊的空间,所有坐标都在投影之后。

您的世界单位可能是任何东西。 相关的部分是如何计划的。 假设您有一个90°FOV的透视投影,靠近剪辑平面为0.01,远离剪辑平面为10.0,为二次方(为简单起见)。 然后,您进入世界的视图体积将解析为一个边长为0.01且与观察者接近0.01距离的矩形,并在边长为0.02的远处拉伸到10.0。 降低FOV,横向长度相应缩小。

尽管如此,大约在0.01到10范围内的坐标会投影到+/- 1剪辑空间中。

因此,取决于您的场景和选择的单位,由您决定投影限制。

归一化窗口坐标范围始终为-1到+1。 但是可以根据需要使用它。 假设我们希望范围是-100到+100,然后将实际坐标除以100。在这种情况下,请仅使用函数glVertex2f或glVertex3f。 例如glVertex2f(10 / 100,10 / 100)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM