【发布时间】:2015-04-27 17:24:15
【问题描述】:
我正在使用 C++ 和 Irrlicht 制作 3D 游戏。这是一个FPS风格的游戏,所以玩家应该能够携带武器。但我一直在努力计算相对于相机的位置。如果相机不旋转,计算会很容易:
// node is camera's child
vector3df modifier = vector3df(2, 0, 2);
node->setPosition(node->getPosition() + modifier);
但是,相机不是静止的,而是旋转的物体,所以事情有点复杂。这是一张图片,希望能说明我想说的话:
这应该适用于所有维度,X、Y 和 Z。我认为这种目的只有两个三角函数,正弦和余弦,它们用于计算 X 和 Y 坐标。我是在错误的道路上还是可以将它们应用于此?或者 Irrlicht 本身有解决方案吗?这是我尝试使用的代码(从 SO 中找到的):
vector3df obj = vector3df(2, 0, 2);
vector3df n = vector3df(0, 0, 0);
n.X = obj.X * cos(60 * DEGTORAD) - obj.Z * sin(60 * DEGTORAD);
n.Z = obj.Z * cos(60 * DEGTORAD) + obj.X * sin(60 * DEGTORAD);
node->setPosition(node->getPosition() + n);
但武器只是向前飞。
我很乐意提供任何帮助或指导。
附:希望这个问题比上一个问题更清楚
【问题讨论】:
-
这不是一个编程问题(本身),这更像是一个数学问题。
-
是的,确实如此。让我再问一遍?
-
我建议这样做。那里的用户会更熟悉这种类型的几何(并不是说你不能幸运地在这里找到一些)。一旦您能够在纸上写下方程式,您可以在这里询问您是否在代码中遇到困难。
-
值得花时间首先澄清这个问题。你有一个水平平移的相机,但不能向上或向下倾斜。你在某处有一个对象。您知道相机和物体的 (x,y) 坐标,以及相机的旋转角度,而您正在尝试计算……什么?
-
其实我觉得标签已经够清晰了。数学家和程序员都可以看。
标签: c++ math 3d position irrlicht