gpt4 book ai didi

javascript - 如何更高效地进行这种坐标系操作呢?

转载 作者:行者123 更新时间:2023-11-30 10:41:34 25 4
gpt4 key购买 nike

我正在制作一款 3D 游戏,玩家的背部应该始终面向镜头,并且他应该朝那个方向移动。我还没有谈到“背对着镜头”的部分,但我相信一旦我弄清楚如何让玩家朝正确的方向移动,它就会很简单......

虽然它是一个 3D 坐标系,但可以忽略高度(z 轴),因为无论摄像机有多高,玩家应该始终以相同的速度前进(摄像机系统的功能与游戏魔兽世界)。

现在,我已经将我的问题总结为...

  • Point (0, 0) 是玩家的位置。
  • Point (x, y) 是相机的位置。
  • 相机距离玩家 (dx, dy) 个单位(并且因为玩家位于 (0, 0),所以它也是 (x, y) 个单位,尽管这是一个位置向量,而不是平移向量)

问题:如何在 2D 空间中找到位于圆 r = 1 上但与 (0, 0) 和 (x, y) 在同一直线上的点 (a, b)?

可视化:

enter image description here

通过这样做,我应该有一个 2D 向量 (a, b),当它乘以 -30 时,它将作为玩家的速度。

我知道如何做到这一点,但使用毕达哥拉定理、平方根和所有那些毫无疑问的工具(使用 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;

一定有更好的东西!

作为引用,我正在使用 Three.js 引擎用 Javascript 制作游戏。

最佳答案

这里没有什么可以提高效率的,这些计算是 3D 场景的标准内容。

不要过早优化。这些东西不可能成为您应用程序的瓶颈。

请记住,即使这些计算发生在每个 render() 上,它们仍然只会每几毫秒发生一次 - 假设 60 FPS 为 17 毫秒,这很多Math.sin()/Math.cos()/Math.sqrt() 非常高效,每个计算都发生了很多其他计算render() 复杂得多。

你会很满意你现在所拥有的。

关于javascript - 如何更高效地进行这种坐标系操作呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10773693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com