游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7031|回复: 9

OpenGL难题:关于gluPerspective(fovy,...

[复制链接]

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2006-6-13 11:56:00 | 显示全部楼层 |阅读模式
OpenGL里的 gluPerspective函数,是设定"可视范围"的.
其中的第一个参数 fovy 非常重要!
在 FPS游戏(比如:反恐精英CS)中,这个参数 fovy 如果设得不正确,会导致游戏玩家在旋转中感觉不适应,头晕,呕吐(特别是那些对视觉敏感的玩家).
我看过一些原代码,在一般情况下,程序员喜欢把 fovy 设置成 45度.但在游戏过程中,我感觉这个45度并不是真实的值,它让我感到头晕,恶心.

所以我想跟大家讨论讨论这个问题:
fovy 应该设置成多大的角度才是最真实,看着最舒服的?

我是这么认为的.
显示器的上下距离是27cm,所以从重点开始,是(-13.5cm,13.5cm),
平常,我玩 CS 的时候,眼睛离显示器的距离是 54cm,
因此, Tan(fovy/2)=13.5/54=0.25
所以,(fovy/2)=ArcTan(0.25)=14度,(就是说 Tan14度=0.25)
所以 fovy = 14度 x 2 = 28度 !

这,就是我的选择!
使用 gluPerspective(28.0f,ration,0.1f,1000.0f); 后,感觉非常舒服,非常真实!
这头也不疼了,腿脚也好了!
真是出家旅行必备良药啊!

请认准, fovy = 28.0f 度!
[em3]

0

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-6-16 14:00:00 | 显示全部楼层

Re:OpenGL难题:关于gluPerspective(fovy,...

呵呵,分析的很有趣:)

不过这么算的话,你是把显示器的屏幕到眼睛的距离当作近裁减平面的距离,可实际上显示器屏幕只是经过viewport变换后的结果,而近裁减平面是frustum的,而投影平面不一定等于近裁减平面,只不过很多游戏使用这样的处理。设想如果人的视野只有28度,而你把显示器的屏幕视野设置为28度(作为near clipping surface),那么你除了显示器,什么都看不到了,你的眼里只有显示器:)

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2006-6-22 10:10:00 | 显示全部楼层

Re:OpenGL难题:关于gluPerspective(fovy,...

Twinsen82,你肯定是菜鸟!
gluPerspective(28.0f,ration,0.1f,1000.0f); 屏幕到眼睛的距离是 0.1f 啊!
你却说 "你是把显示器的屏幕到眼睛的距离当作近裁减平面的距离"
我可没把距离设置成 0.54 啊,
呵呵,明白自己的错误了吧?
gluPerspective,只是角度关系,近平面大小都是通过计算得来的.

你还说 "那么你除了显示器,什么都看不到了,你的眼里只有显示器:)"
呵呵,可是正常的摄象机都是这样的啊.所以摄象机拍摄下来的视频都很真实.
而PC摄象头的视野是45度,所以会出现"近的物体特别大"的问题
比如你用摄象头照相,会发现里的鼻子变大了.
因为鼻子离摄象头近,所以特别大. 这,就是视野太大所引起的.

明白了吗?

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-6-22 11:17:00 | 显示全部楼层

Re:OpenGL难题:关于gluPerspective(fovy,...

不知道说的啥

3

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2006-6-24 09:13:00 | 显示全部楼层

Re:OpenGL难题:关于gluPerspective(fovy,...

我没有试过45度。反正有些游戏是太使人头晕。
我也用28度FoV(Field of View).
我只是知道使用gluPerspectiv,可以设置
Fov,Aspect Ratio,Distance to Near Plane,Distance to Far Plane from Origin of Eye Coordinate System.
可以问一下,为何将near plane 设置在10厘米处,而不在54厘米处呢?
听说好像在50厘米设置near plane可以使depth buffer的精度达到做好。

0

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-6-26 13:10:00 | 显示全部楼层

Re: OpenGL难题:关于gluPerspective(fovy,...

snhun,

你好,我觉得你对我的话理解的有问题。我说

“你是把显示器的屏幕到眼睛的距离当作近裁减平面的距离”

并不是说设置

gluPerspective(xxx,xxx,0.54f,xxx);

呵呵,我觉得你这里理解的不是很好,我的意思是你的推导

过程是把屏幕当作near plane了,你说:

“我是这么认为的.
显示器的上下距离是27cm,所以从重点开始,是(-13.5cm,13.5cm),
平常,我玩 CS 的时候,眼睛离显示器的距离是 54cm,
因此, Tan(fovy/2)=13.5/54=0.25
所以,(fovy/2)=ArcTan(0.25)=14度,(就是说 Tan14度=0.25)
所以 fovy = 14度 x 2 = 28度 !”

你的Tan(fovy/2)=13.5/54=0.25,很显然把54作为分母,而这个

数字应该是eye到near plane得垂直距离:)这样,这个事实现在

没有争论的必要了把?好,接下来,你在推导过程中,把screen

作为near plane,似乎觉得很顺理成章,很舒服,而觉得一般的

camera得成像也是这样的,但你是否在打游戏的时候把眼睛凑到显示器

跟前以至于除了显示器什么都看不到? 根本不可能,除非超级近视

人的eye有视差,显示的是stereo view,而目前对于屏幕,只能采用透视

作图法来实现3D效果,camera也是这样的阿,所以“鼻子会变大”。

0

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2006-6-26 13:29:00 | 显示全部楼层

Re:OpenGL难题:关于gluPerspective(fovy,...

snhun

另外,我知道你已经理解了gluPerspective这个函数,你的用法也是对的,但是你解释的不是

很好,以至于dongxue提出了

“可以问一下,为何将near plane 设置在10厘米处,而不在54厘米处呢?”这样的问题,

对于后两个参数,采用的是generic unit,即通用单位,这个单位不是什么具体的cm, m,

pt等等等等。而是一个抽象单位,你在推导的时候可以用m,cm等等你喜欢的任何尺寸单位,但

是推导时单位要保持一致,这样得到的near plane和far plane才是正确的。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2006-6-27 15:38:00 | 显示全部楼层

hehe

原来是我误会了.
呵呵

对,是只能看到显示器的范围.

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2006-6-29 13:34:00 | 显示全部楼层

回 5楼的 dongxue

你问"为何将near plane 设置在10厘米处,而不在54厘米处呢?"
我的确是以 m 为长度单位的.
为什么不设成54厘米? 那是因为
如果设成54厘米,那么从眼睛到54厘米之间的东西,就不会渲染到画面上了.

就这么简单. 所以从10厘米开始的.

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2006-6-29 13:42:00 | 显示全部楼层

回6楼

你说"camera得成像也是这样的,但你是否在打游戏的时候把眼睛凑到显示器跟前以至于除了显示器什么都看不到? "
我认为这样说不对.
就是因为我不"把眼睛凑到显示器跟前",所以才用 13.5/54 来计算的.
如果像你所说,那分母应该是 13.5, 这样 FOVY=ARCTAN(13.5/13.5)=45度.

这样会给你这样的感觉.
虽然我离屏幕的距离是54厘米,但我却看到离屏幕13.5厘米是的画面.而这
就是 "头晕目眩" 的根本原因.

用一个显示器来玩,当然只能看一个显示器的视野范围了.

我要是有 投影仪,那该多好啊?
那我就把FOVY设置成45度.我左在球状房间里,会感觉非常真实.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 20:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表