谷歌搜索后,我还没有找到这个问题的答案,所以我要在这里尝试一下。
使用 (2d) 画布,我在 javascript 中创建了一个 3d 世界,甚至是一个可以正常工作的 3d 相机。但是,相机是“自由相机”,因此当您旋转时,相机会围绕自身旋转。
现在我想让相机围绕一个世界对象旋转,但我很难理解如何做到这一点。
我尝试了以下公式,但在我尝试旋转之前它就吓坏了......
this.x += (Math.sin(this.yd * (Math.PI / 180)) * distance);
this.z -= (Math.cos(this.yd * (Math.PI / 180)) * distance);
到目前为止已更新
多亏了下面 WojtekT 提供的 anwser,我得到了以下代码,它使相机围绕对象旋转,但似乎也在放大......这可能只是我的眼睛在愚弄我,因为距离变量几乎没有变化(我认为有一个很小的四舍五入问题,但除此之外它给出了预期的结果)
this.y = (Math.sin(this.yd * (Math.PI / 180)) * distance + this.targetY);
this.z = (Math.cos(this.yd * (Math.PI / 180)) * distance + this.targetZ);
this.yd 是以度为单位运行的速度。
我需要什么公式?
编辑:我不确定哪些代码可以帮助解决这个问题,所以这里是完整的源代码:
http://clanpvp.com/sol http://clanpvp.com/js/sol/camera.js < 相机对象,这可能。
出于调试原因,触发 keyup 事件时会加载新帧。同样为了调试,目标对象是一个固定点。在屏幕中央。
箭头键移动相机,wasd 键转动相机,到目前为止只有 W 和 S 做某事,但由于上面的代码,他们做错了......