矢量旋转3D摄影机平铺

矢量旋转3D摄影机平铺,3d,vector,camera,tilt,3d,Vector,Camera,Tilt,希望答案很简单,但我无法得到 我有一个3D渲染引擎,我已经写了 我有摄像机位置,注视位置和上方向向量 我想能够“倾斜”的相机左,右,上下。就像固定三脚架上的相机一样,你可以抓住手柄,上下左右倾斜 数学难倒我了。我已经能够做向前/向后推拉和上/下/左/右平移,但无法计算出使其倾斜的向量数学 对于左倾斜和右倾斜,我希望围绕摄影机位置旋转注视位置,但我需要考虑上方向向量,否则旋转不知道要旋转哪个轴 我需要的数学/算法大致如下 摄像机=(cx、cy、cz) 注视=(lx,ly,lz) 向上=(ux,uy

希望答案很简单,但我无法得到

我有一个3D渲染引擎,我已经写了

我有摄像机位置,注视位置和上方向向量

我想能够“倾斜”的相机左,右,上下。就像固定三脚架上的相机一样,你可以抓住手柄,上下左右倾斜

数学难倒我了。我已经能够做向前/向后推拉和上/下/左/右平移,但无法计算出使其倾斜的向量数学

对于左倾斜和右倾斜,我希望围绕摄影机位置旋转注视位置,但我需要考虑上方向向量,否则旋转不知道要旋转哪个轴

我需要的数学/算法大致如下

摄像机=(cx、cy、cz) 注视=(lx,ly,lz) 向上=(ux,uy,uz)

旋转整数向量(lx,ly,lz,ux,uy,uz,amount)

有人能帮我学这门数学吗


非常感谢。

这在数学上可能不是最优的,但您可以将摄影机分解为三个向量,其中两个定义水平面,另一个定义上方向向量

要获得水平面,可以获得一个向量作为上方向向量和摄影机的叉积,以查看向量。然后你可以得到另一个正交向量,取上的点积和刚找到的向量。别忘了规范化你的三个向量

接下来,使用相机的点积,用三个向量查看向量,然后围绕水平面旋转(将向量视为坐标轴)


很抱歉用文字表达。我希望这会有所帮助。

您可以在相机前面画一个点,然后围绕相机旋转(使用trig)并使用lookat()旋转相机


一旦您必须开始使用滚动(围绕Z旋转),这将不起作用。因此,您可能需要创建一个基于四元数的摄影机类。这个链接帮助了我:

基本上你可以为你的相机可视化一个局部坐标系

局部Z是注视向量(从摄像机中心到注视点),并且“进入屏幕”。本地Y将朝向屏幕上方。如果保持摄影机上方向向量垂直于摄影机注视向量,则上方向向量也是局部Y。局部X将垂直于其他两个轴(这是它们归一化后的叉积)

左右旋转是围绕局部Y轴(偏航)旋转注视向量的问题。上下旋转是指围绕局部X轴(俯仰)旋转上方向向量和注视方向向量。“左右倾斜头部”是围绕局部Z轴(气缸组)向上旋转矢量的问题

每次更改注视向量或上方向向量时,都需要重新计算局部轴