我的问题类似于3D Scene Panning in perspective projection (OpenGL),但我不知道如何计算移动网格的方向。
我有一个可以选择各种网格的程序。一旦选择了网格,我希望它在单击拖动光标时进行翻译。当光标向上移动时,我希望网格向上移动,依此类推以获得适当的方向。换句话说,我希望网格沿着垂直于观察方向的平面方向转换。
我在光标位置有Delta(x,y)的Vector2,我有摄像机的Vector3 viewDirection和网格的中心。我怎样才能找出使用Delta和viewDirection在3d空间中转换网格的方法?我是否需要其他信息才能进行此计算(例如up或eye)?
如果翻译的规模是关闭的,那我也只是想弄清楚方向。
编辑:出于某种原因,我对获得上升方向感到困惑。显然,可以通过将相机旋转应用于指定的透视向上矢量来计算。答案 0 :(得分:1)
你需要一个额外的矢量upDirection
,它是从你的相机指向“向上”的单位矢量。您现在可以交叉产品viewDirection
和upDirection
来获取rightDirection
,向量指向您相机的“右侧”。
您希望将y
增量映射到upDirection
(或-upDirection
)和x
增量中的运动到rightDirection
中的运动。这些载体位于世界空间。
您可能希望缩放转换速度以匹配鼠标速度。如果您正在使用透视投影,则需要根据模型相对于相机的深度来缩放平移速度(对象距离相机越远,如果您希望它与鼠标匹配,则需要移动它的速度越快。)