【发布时间】:2012-08-19 07:50:42
【问题描述】:
我设计了一个 C++ 类,将用户从轨迹球旋转、缩放和平移中抽象出来。我已经按预期进行了旋转(使用轨迹球)和缩放。但是,平移的行为与预期不同。当我选择一个点并拖动时,我希望在完成拖动时,选择的点继续在鼠标下方。我对透视投影中平移的理解如下。目标和摄像机位置都会受到平移操作的影响。摄像机目标和摄像机位置(眼睛)应与拖动成比例平移。比例(可能不是恒定的)应基于 z 深度。
在正交投影中平移是直截了当的,但在透视中会出现问题。如果有人能解释 OpenGL 的数学和实现细节,将会很有用。
【问题讨论】:
-
你是在改变凸轮还是整个世界来获得结果?
-
我都实现了。但我更喜欢改造世界,因为它不涉及计算模型视图矩阵的逆矩阵。但是,如果我有任何一种方法的解决方案,我都很好。
-
“但是,平移的行为不像预期的那样。当我选择一个点并拖动时,我希望在完成拖动时,选择的点继续在鼠标下方”。这就像你的鼠标按钮被锁住并没有松开吗?
-
是的。当我按下 lButtonDown 时,我在鼠标下方选择了一个假想点,当我继续保持 lButtonPressed 时,我可以移动鼠标以平移场景。 2D 中的一个类似示例是 pdf 文档查看器,用户在其中抓取页面上的一个点并移动查看区域。
-
我打赌你可以从gamedev.stackexchange.com获得真正好的答案和声誉