希望很容易回答,但我无法得到它。
我有一个我写过的3D渲染引擎。
我有相机位置,外观位置和向上矢量。
我希望能够向左,向右,向上和向下“倾斜”相机。就像固定三脚架上的相机一样,您可以抓住手柄并将其向上,向下,向左倾斜等。
数学让我很难过。我已经能够向前/向后移动小车和向上/向下/向左/向右平移,但无法计算向量数学以使其倾斜。
对于左右倾斜,我想围绕相机位置旋转外观位置,但我需要考虑向上矢量,否则旋转不知道要转向哪个轴。
我需要的数学/算法是......
相机=(CX,CY,CZ) LOOKAT =(LX,LY,LZ) UP =(UX,UY,UZ)
RotatePointAroundVector(LX,LY,LZ,UX,UY,UZ,量)
有人可以协助所涉及的数学吗?
非常感谢。
答案 0 :(得分:2)
你可以在相机前面制作一个点,然后在相机周围旋转(使用trig)并使用你的lookat()来旋转相机。
一旦你必须开始使用roll(围绕Z旋转),这将无法工作。所以你可能想创建一个基于四元数的相机类。这个链接帮助了我:gpwiki.org/Quaternion...
答案 1 :(得分:0)
它可能在数学上不是最优的,但你可以将相机去组合以将矢量看成三个矢量 - 两个定义水平平面和向上矢量。
要获得水平平面,您可以获得一个向量作为向上向量和相机的交叉乘积来查看向量。然后,您可以通过获取向上的点积和刚刚找到的向量来获得另一个正交向量。不要忘记将三个向量标准化。
接下来,使用相机的点积来查看三个矢量的矢量,现在围绕水平面进行旋转(将矢量视为坐标轴)。
很抱歉用文字表达。我希望这会有所帮助。
答案 2 :(得分:0)
基本上,您可以为相机显示本地坐标系。
本地Z 是外观矢量(从相机中心到外观点)并且是“进入屏幕”。 本地Y 将朝向屏幕的上方。如果你保持你的相机向上矢量垂直于相机外观矢量,那么向上矢量也是局部Y. 局部X 将是另外两个轴的正常(它们是他们的十字产品之后)归一化)。
旋转左 - 右是围绕局部Y轴(偏航)旋转外观矢量的问题。旋转上下是围绕局部X轴(俯仰)旋转向上矢量和外观矢量的问题。 “倾斜头部”左右是围绕局部Z轴(库)向上旋转的问题。
每次更改外观矢量或上矢量时,都需要重新计算局部轴。