【发布时间】:2018-04-24 09:51:39
【问题描述】:
我正在尝试通过鼠标移动来更改相机视图,并希望相机以轨迹球方式围绕原点移动而不进入场景;有点像圆顶的视图。
以下内容可以令人满意地获取眼睛坐标并制作这个半弧形视图。我硬编码了一个条件,以便我无法在场景下方查看。这种情况的后果是,相机不会进入场景下方,而是会放大到中心。我无法思考如何阻止相机进行这种“变焦”。当我到达穹顶视图的最低部分时,我希望只能向左或向右移动。距离是恒定的。有什么指导吗?
void onMotion(int x, int y) {
camX = distance * -sinf(x*(M_PI / 180)) * cosf((y)*(M_PI / 180));
camY = distance * -sinf((y)*(M_PI / 180));
camZ = -distance * cosf((x)*(M_PI / 180)) * cosf((y)*(M_PI / 180));
if (camY < 4)
camY = 4;
glutPostRedisplay();
}
【问题讨论】:
-
距离有变化吗?或者,如果没有,您的视野是否正在改变?这也可能导致缩放效果。
-
@user1118321,没有距离是静态的。如何检查 FOV 是否在变化?
-
视野由投影矩阵控制。如果它发生变化,它可能会产生缩放效果。
-
知道了。但它也没有改变。