给定视图方向和光标位置的变化,如何翻译3d网格

时间:2013-04-13 22:55:06

标签: math opengl geometry translation user-interaction

我的问题类似于3D Scene Panning in perspective projection (OpenGL),但我不知道如何计算移动网格的方向。

我有一个可以选择各种网格的程序。一旦选择了网格,我希望它在单击拖动光标时进行翻译。当光标向上移动时,我希望网格向上移动,依此类推以获得适当的方向。换句话说,我希望网格沿着垂直于观察方向的平面方向转换。

我在光标位置有Delta(x,y)的Vector2,我有摄像机的Vector3 viewDirection和网格的中心。我怎样才能找出使用Delta和viewDirection在3d空间中转换网格的方法?我是否需要其他信息才能进行此计算(例如up或eye)?

如果翻译的规模是关闭的,那我也只是想弄清楚方向。

编辑:出于某种原因,我对获得上升方向感到困惑。显然,可以通过将相机旋转应用于指定的透视向上矢量来计算。

1 个答案:

答案 0 :(得分:1)

你需要一个额外的矢量upDirection,它是从你的相机指向“向上”的单位矢量。您现在可以交叉产品viewDirectionupDirection来获取rightDirection,向量指向您相机的“右侧”。

您希望将y增量映射到upDirection(或-upDirection)和x增量中的运动到rightDirection中的运动。这些载体位于世界空间。

您可能希望缩放转换速度以匹配鼠标速度。如果您正在使用透视投影,则需要根据模型相对于相机的深度来缩放平移速度(对象距离相机越远,如果您希望它与鼠标匹配,则需要移动它的速度越快。)