当相机在OpenGL中旋转时,如何保持对墙壁之间角度的感知?

当相机在OpenGL中旋转时,如何保持对墙壁之间角度的感知?,opengl,camera,Opengl,Camera,我正在建造一些不同形状的房间:平行四边形、矩形、菱形、正方形等等。观众应该从不同的角度看房间,左右转动头,猜房间的形状。所以这里“感知墙壁之间的角度”非常重要。我的问题是: 1) 大多数锐角似乎与距离成90度 2) 当观众向左或向右转头时,墙壁之间的角度以及墙壁的长度似乎都会发生变化 正如我一直读到现在,这是使用透视投影的结果;然而,如果使用正交投影,我在屏幕上就没有深度(没有深度感知),因为我在房间里,房间的大小应该比剪裁区域大,这会产生一个相当垃圾的图像 我只是想知道有没有办法避免或者至少最

我正在建造一些不同形状的房间:平行四边形、矩形、菱形、正方形等等。观众应该从不同的角度看房间,左右转动头,猜房间的形状。所以这里“感知墙壁之间的角度”非常重要。我的问题是:

1) 大多数锐角似乎与距离成90度

2) 当观众向左或向右转头时,墙壁之间的角度以及墙壁的长度似乎都会发生变化

正如我一直读到现在,这是使用透视投影的结果;然而,如果使用正交投影,我在屏幕上就没有深度(没有深度感知),因为我在房间里,房间的大小应该比剪裁区域大,这会产生一个相当垃圾的图像

我只是想知道有没有办法避免或者至少最小化这种变形效应?我是否应该建立自己的投影(介于格洛托和格洛托之间)

还值得一提的是,我使用“glutlookatfunction”来定位相机和观察点。眼睛的位置始终是房间的一个角落,初始注视点是观察者的另一个角落。按左右箭头键,注视点在围绕房间的假想圆上移动,就像我之前看到的大多数OpenGL程序一样。你认为如果我移动墙上的观察点会更好吗?或者旋转房间而不是改变观察点

为了更好地说明我的问题,我添加了一些图片:

这是我的平行四边形房间:

正如你在这里看到的,锐角,应该是60度,看起来至少是90度。这是我的长方形房间,它根本不会给你一种置身于长方形房间的感觉:


我想说,在没有看到实际问题的情况下,您的相机视场太大了

根据你的评论,你的相机有一个112.5°的水平视场,我相信这会在屏幕边缘引入“非自然的扭曲”:简单的OpenGL透视投影是线性的,并且视场太宽

当你想了解用户的感知时,你可能想看看这个比较照相机和人眼的例子

您应该尝试降低相机的水平FOV,可能在80-90°范围内,看看是否有帮助


作为最后的手段,你可以选择,但在选择之前,你应该做出明智的选择,应该有心理物理学研究(例如)可以帮助你。

大多数可爱的天使
哦,伙计,您的项目有可爱的天使?您是否确保投影矩阵考虑了您的显示纵横比?如何构造投影矩阵?是的,伙计,我通过“glutget”函数获得屏幕的宽度和高度,并计算纵横比,即1.25,用于发送到“gluperspective(90,纵横比,1.0,30.0)”。我使用了“远投影平面”的值,并将其从100.0减少到30.0(房间大小为20 X 10),但我没有看到任何改进。更改“z远”将永远不会影响投影矩阵的视野/失真。此外,尝试在回复评论中使用@作为标题,通知作者您的回复。@谢谢您的回复,但遗憾的是,我无法通过降低水平视场来实现任何改进。也许我在帖子中添加的图片更好地显示了我的问题。@OmidRanjbar确实,角度看起来不正确,但我无法解释为什么,缺少照明、照明、阴影?还有别的吗?我必须说,我不知道什么是角度感知的问题。我没有使用照明,这似乎是一个非常基本的问题。