如何做到这一点更有效地协调系统操作?(How to do this coordinate syste

2019-10-16 18:54发布

我正在做一个3D游戏,玩家的背部应该总是面对摄像机,他应该在这个方向移动。 我没来“背对着摄像机”的一部分,但我相信,这将是简单,一旦我弄清楚如何将球员在正确的方向...

虽然这是一个三维坐标系,高度可以忽略不计(Z轴),因为无论多么高的摄像头,玩家应该总是在相同的速度去(摄像系统计划的作用更像在游戏世界魔兽)。

现在,我总结我的问题这...

  • 点(0,0)是球员的位置。
  • 点(x,y)是摄像机的位置。
  • 相机(DX,DY)单元远离播放器(和因为玩家为(0,0),它也是(X,Y)单位处,虽然这是一个位置矢量,而不是一个一个翻译)

问题:我如何得到一个点(A,B)在这个二维空间位于圆R = 1,但在同一行(0,0)和(X,Y)?

可视化:

通过这样做,我应该有一个二维矢量(A,B),这将在由-30相乘,充当速度为玩家。

我知道如何做到这一点,但在一个非常昂贵和低效的方式,使用Pythagora定理,平方根,以及所有那些乱的,问题的工具(在Javascript工作)。

基本上,这样的事情:

c = sqrt(dx*dx + dy*dy); //Get the length of the line
rat = 1/c; //How many times is the desired length (1) bigger than the actual length

a = x*rat;
b = y*rat;

必须有更好的东西!

作为参考,我正在JavaScript中的游戏,使用three.js所引擎。

Answer 1:

没有什么能够更有效地在这里,这些计算是3D场景标准的东西。

不要过早地优化。 有没有办法这个东西是你的应用程序的瓶颈。

请记住,即使这些计算发生在每个render()他们仍然只发生一次,每几毫秒- 17MS假设60 FPS,这是很多Math.sin() / Math.cos() / Math.sqrt()有很多有效的,和许多其它的计算发生在每个render()是复杂得多

你会只是你现在有什么好的。



文章来源: How to do this coordinate system operation more efficiently?