【发布时间】:2012-08-18 02:08:09
【问题描述】:
我正在建造许多不同形状的房间:平行四边形、矩形、菱形、正方形等。观众应该从不同的角度看房间,然后左右转动头,然后猜测它们的形状房间。所以这里“对墙之间角度的感知”非常重要。我的问题是:
1) 大部分锐角从远处看都是90度,
2) 当观众向左或向右转头时,墙壁之间的角度以及墙壁的长度似乎会发生变化。
正如我到目前为止所读到的,这是使用透视投影的结果;但是,如果使用正交投影,我的屏幕将没有深度(没有深度感知),而且由于我在房间内,所以房间的大小应该大于裁剪区域,这会产生非常垃圾的图像。
我只是想知道有什么方法可以避免或至少最小化这种变形效果?我应该建立自己的投影(介于 glortho 和 glprospective 之间)吗?
还值得一提的是,我使用“glutlookatfunction”来定位相机和观察点。眼睛 位置 始终 是 房间 的 一个 角落 , 初始 观察 点 是 观察者 的 对 角 . 通过 按 左右 箭头 键 , 观察 点 在 环绕 房间 的 假想 圆 上 移动 , 就像 OpenGL 的 大部分到目前为止我看到的程序。你认为如果我移动墙上的观察点会更好吗?或者旋转房间而不是改变观察点?
我添加了一些图片以更好地说明我的问题:
这是我的平行四边形房间:
正如您在此处看到的,锐角(本应为 60 度)似乎至少为 90 度。这是我的长方形房间,它根本不会让你有置身于长方形房间的感觉:
【问题讨论】:
-
most of the cute angels天哪,你的项目有可爱的天使? -
你确定你的投影矩阵考虑了你的显示纵横比吗?你如何构建你的投影矩阵?
-
是的,伙计,我通过“glutget”函数获取屏幕的宽度和高度并计算纵横比,即1.25,以发送到“gluperspective(90,aspect,1.0,30.0)” .我玩过远投影平面的值,将其从 100.0 降低到 30.0(房间大小为 20 X 10),但我没有看到任何改进。
-
改变 'z far' 不会对投影矩阵的视场/失真产生影响。
-
另外,请尝试在您的回复-cmets 中使用@
作为标题,以通知作者您的回复。