在javascript中围绕对象旋转3d摄影机
谷歌搜索之后,我还没有找到这个问题的答案,所以我打算在这里试试 使用(2d)画布,我用javascript创建了一个3d世界,甚至还制作了一个可以很好地使用它的3d相机。但是,相机是“自由相机”,因此当您旋转时,相机会围绕自身旋转 现在我想让相机围绕一个现实中的物体旋转,但我很难理解怎么做 我尝试了下面的公式,但在我尝试旋转之前它就崩溃了。。。 迄今为止已更新 多亏了下面WojtekT提供的anwser,我得到了下面的代码,它使相机围绕着物体旋转,但似乎也在放大。。。这可能只是我的眼睛在愚弄我,因为距离变量几乎没有变化(我认为有一个很小的舍入问题,但除此之外,它给出了预期的结果) 其中,这个.yd是它应该运行的速度,单位为度 我需要什么配方 编辑: 我不确定哪些代码有助于解决此问题,因此以下是完整的源代码: http://clanpvp.com/js/sol/camera.js在javascript中围绕对象旋转3d摄影机,javascript,math,3d,Javascript,Math,3d,谷歌搜索之后,我还没有找到这个问题的答案,所以我打算在这里试试 使用(2d)画布,我用javascript创建了一个3d世界,甚至还制作了一个可以很好地使用它的3d相机。但是,相机是“自由相机”,因此当您旋转时,相机会围绕自身旋转 现在我想让相机围绕一个现实中的物体旋转,但我很难理解怎么做 我尝试了下面的公式,但在我尝试旋转之前它就崩溃了。。。 迄今为止已更新 多亏了下面WojtekT提供的anwser,我得到了下面的代码,它使相机围绕着物体旋转,但似乎也在放大。。。这可能只是我的眼睛在愚弄
箭头键移动相机,wasd键转动相机,到目前为止,只有W和S做了一些事情,但由于上面的代码,他们做错了…要使此公式起作用,您必须有一些变量来更改每一帧。例如变量
时间:
time += this.yd;
this.x = (Math.sin(time * (Math.PI / 180)) * distance);
this.z = (Math.cos(time * (Math.PI / 180)) * distance);
否则,Math.sin
和Math.cos
每帧返回相同的值。
基本上,对于旋转的物体,你需要提供随时间变化的角度。在本例中,角度是可变的时间
编辑:
在我的回答中,我将+=
替换为=
。此计算给出了正确的x
和z
精确值,因此无需进行任何增量运算
编辑2:
此公式也缺少旋转中心。正确的计算应如下所示:
this.x = (Math.sin(this.yd * (Math.PI / 180)) * distance + object_looked_at.x);
this.z = (Math.cos(this.yd * (Math.PI / 180)) * distance + object_looked_at.z);
你说的“它疯了”是什么意思?我不太清楚到底发生了什么,但相机似乎每帧都会向后移动。我猜我使用的公式是完全错误的,所以相机做了一些完全不同的事情,然后我想你能给我们展示更多的代码吗?我不太确定什么代码可以帮助解决这个问题,所以我将只链接项目。是的,请,这肯定会有帮助。yd在用户按键时会改变,对不起,我不清楚。我列出了使事情更清楚的希望来源是这个.yd
旋转的速度或旋转本身?这个.yd就是旋转本身。你似乎不需要增加.x
和.z
。我已经编辑了我的答案,并将+=
和-=
替换为=
。我更新了代码以反映您的anwser(减去时间变量),但camara仍然不起作用(即使没有任何输入)
time += this.yd;
this.x = (Math.sin(time * (Math.PI / 180)) * distance);
this.z = (Math.cos(time * (Math.PI / 180)) * distance);
this.x = (Math.sin(this.yd * (Math.PI / 180)) * distance + object_looked_at.x);
this.z = (Math.cos(this.yd * (Math.PI / 180)) * distance + object_looked_at.z);