首页 >> 大全

OpenGL视景台

2023-07-29 大全 28 作者:考证青年

很多刚学的朋友,都会对视景台的定义有很大的迷惑,这里以我的经验来解释一下,希望对大家有所帮助,

void ( left, right, , top, near, far);

在这个函数中,有六下参数,这六个参数,都不是真实的世界坐标(虽然有些书上说它们是坐标),而指的是到眼睛的平面距离,

left,right分别指的是左右截面到眼睛(在XY平面上)的距离,这两个数不必一定要对称,甚至两个都可以大于或小于0;

对称

|-------------|

| |

| eye |

| |

|-------------|

left( - 1.0 )right( 1.0 )

====================================================

不对称

|-------------|

| |

eye | |

| |

|-------------|

left( 1.0 )right( 2.0 )

视景体默认情况下,眼睛位置是在坐标原点(0.0f,0.0f,0.0f)处,视线指向Z轴的负向。

如果是这种情况,上图中的left,right的值,就刚好是与它们的世界坐标一一对应的。top和也同样理解。

一种理解方式是这样:

眼睛是位于坐标原点,是逆着Z轴向屏幕里看的;

,函数的zNear, zFar都是相对眼睛的距离,

其各自的负值为相对于坐标系原点的坐标值;

每个画的物体,其中心最开始都是位于坐标系的原点的,通过, 函数,把物体移动到视景中,/这样物体才可以被看得见;

但是事实上,眼睛可以是任何位置,视线也可以不平行于Z轴,这种情况情下,left,right,top,,near,far,

它们指的就只是到眼睛的平面距离,与坐标没有一一对应的关系。

好像越说越复杂了。呵呵。

===============================================

你可以这样想:在眼睛前面有一个视景台,这个台体并不是固定的,而是随着你视线的转动而转动,

也就是说,视景台的正面和底面始终与视线垂直。那么,当你的眼睛是在(0,0,0)处,视线是指向Z的负向时,

视景台的近面(0.3)和远面(0.7)所对应的坐标,就是(-0.3,-0.7)

[code]

|Y (0.3) (0.7)

| |

|0.0| -0.3 |-0.7

*eye-------------|--------------|-------> -Z

| | |

| |

|[/code]再举个例子,如下图,眼睛在0.1处,视线指向X轴正向,

那么视景台也在X轴正向上,近面对应的坐标是0.4,远面对应的坐标是0.8

[code]

|Y(0.3) (0.7)

| |

|0.0 0.1 | 0.4 |0.8

-------eye *-----|--------------|------->X

|| |

| |

|[/code]另外一种理解方式是这样的:

物体在空间中者有着其固定的位置。物体不被移动,

我们可以通过调整眼睛的位置,和视线的方向,来观看空间中的所有物体。

================================================

其实这是一个非常主观性的问题,

主要是看你如何去看待。

也就是说,我们可以设想眼睛不动,只移动空间中的物体。

但是我们也可以设想坐标系中的物体不动,我们只移动眼睛,

动作是相对的,但效果是一样的

对于3DMAX这样的绘图软件就是一种眼睛不动的做法。

但对于游戏,地形漫游之类的软件,则是采用,物体不动,只移动眼睛位置的方法。来模拟一个人在地形上走动

=====================================

前面我们说过,视景台是可以不对称的(这个特性有一些高级应用),

但大多的情况下我们还是会定义一下与视线对称的视景台。于是我们可以使用这个函数。

函数的zNear, zFar都是相对眼睛的(YZ平面)距离,fovy是视野角度。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了