作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一款 3D 游戏,玩家的背部应该始终面向镜头,并且他应该朝那个方向移动。我还没有谈到“背对着镜头”的部分,但我相信一旦我弄清楚如何让玩家朝正确的方向移动,它就会很简单......
虽然它是一个 3D 坐标系,但可以忽略高度(z 轴),因为无论摄像机有多高,玩家应该始终以相同的速度前进(摄像机系统的功能与游戏魔兽世界)。
现在,我已经将我的问题总结为...
问题:如何在 2D 空间中找到位于圆 r = 1 上但与 (0, 0) 和 (x, y) 在同一直线上的点 (a, b)?
可视化:
通过这样做,我应该有一个 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/
我是一名优秀的程序员,十分优秀!