Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 旋转对象,使其在Three.js中重置y轴旋转_Javascript_Three.js_Rotation_Physijs - Fatal编程技术网

Javascript 旋转对象,使其在Three.js中重置y轴旋转

Javascript 旋转对象,使其在Three.js中重置y轴旋转,javascript,three.js,rotation,physijs,Javascript,Three.js,Rotation,Physijs,我使用three.js创建了一个游戏,游戏中的汽车根据y轴旋转方向朝特定方向移动。例如90度。我使用object.translateZ()将它们向前移动,但遇到了一个问题 我用physijs来模拟汽车。相互碰撞的车辆可能会改变其y轴旋转(因为碰撞),我想找到一种方法,让车辆慢慢地将其旋转变回原始旋转,就像它们转向返回道路一样。没有这个,我的城市非常混乱 以下是我已经在使用的代码(这只是其中的一部分): 我想找到一种方法,慢慢改变汽车的旋转,使其与目标旋转相同 感谢您的帮助!(但某种功能可能是完美

我使用three.js创建了一个游戏,游戏中的汽车根据y轴旋转方向朝特定方向移动。例如90度。我使用
object.translateZ()
将它们向前移动,但遇到了一个问题

我用physijs来模拟汽车。相互碰撞的车辆可能会改变其y轴旋转(因为碰撞),我想找到一种方法,让车辆慢慢地将其旋转变回原始旋转,就像它们转向返回道路一样。没有这个,我的城市非常混乱

以下是我已经在使用的代码(这只是其中的一部分):

我想找到一种方法,慢慢改变汽车的旋转,使其与目标旋转相同


感谢您的帮助!(但某种功能可能是完美的)

我以前在其他系统(2D,而不是Three.js)中也做过类似的事情,基本上你所要做的就是逐渐增加角度,直到达到足够接近目标角度的角度。通常这意味着浮动小于增加的旋转速度(因此不会“超出”该值)

增量的大小取决于您希望它们转动的速度

您还需要检查是否最好增加或减少角度(顺时针或逆时针旋转),这取决于您是否接近360或0。这可以防止汽车“长距离”转弯。您可以通过查看差值是否大于/小于180来了解这一点

我们可以使用模运算符获得-360/360之间的“真实”角度

var currentAngle = car.mesh.rotation.y * 180 / Math.PI; //car's angle in degrees
var targetAngle = 90; //preferred angle *this time* ;)
var turningSpeed = 1; //one degree per update (wayyy to high for real stuff, usually)
currentAngle = currentAngle % 360; //get the 0-360 remainder
if ( Math.abs(targetAngle - currentAngle) >= turningSpeed) {
  var addto = 0
  if (targetAngle - currentAngle < 0) {
    addto = 360
  }
  if ( targetAngle - currentAngle + addto <= 180 ) { 
    currentAngle += turningSpeed;  
  }
  else {
     currentAngle -= turningSpeed;
  }
}
else { currentAngle = targetAngle; } //we're close enough to just set it
car.mesh.rotation.y = ( currentAngle * Math.PI ) / 180; // back to radians!
var currentAngle=car.mesh.rotation.y*180/Math.PI//汽车角度(度)
var targetAngle=90//首选角度*这次*;)
无功转速=1//每次更新一度(通常情况下,对于真正的东西,从Y到高)
currentAngle=currentAngle%360//获取0-360余数
if(数学绝对值(目标角度-当前角度)>=转动速度){
var addto=0
if(目标角度-当前角度<0){
addto=360
}

如果(targetAngle-currentAngle+addto我以前在其他系统(2D,而不是Three.js)中做过类似的事情,基本上你要做的就是逐渐增加角度,直到你达到足够接近目标角度的角度。通常这意味着浮动小于你增加的旋转速度(所以你不会“超调”)值)

增量的大小取决于您希望它们转动的速度

您还需要检查是否最好增大角度或减小角度(是顺时针还是逆时针转动),这取决于您接近360还是0。这会阻止车辆“长距离”转弯。您可以通过查看差值是否大于/小于180来了解这一点

我们可以使用模运算符获得-360/360之间的“真实”角度

var currentAngle = car.mesh.rotation.y * 180 / Math.PI; //car's angle in degrees
var targetAngle = 90; //preferred angle *this time* ;)
var turningSpeed = 1; //one degree per update (wayyy to high for real stuff, usually)
currentAngle = currentAngle % 360; //get the 0-360 remainder
if ( Math.abs(targetAngle - currentAngle) >= turningSpeed) {
  var addto = 0
  if (targetAngle - currentAngle < 0) {
    addto = 360
  }
  if ( targetAngle - currentAngle + addto <= 180 ) { 
    currentAngle += turningSpeed;  
  }
  else {
     currentAngle -= turningSpeed;
  }
}
else { currentAngle = targetAngle; } //we're close enough to just set it
car.mesh.rotation.y = ( currentAngle * Math.PI ) / 180; // back to radians!
var currentAngle=car.mesh.rotation.y*180/Math.PI;//以度为单位的汽车角度
var targetAngle=90;//首选角度*这次*;)
var turningSpeed=1;//每次更新一度(通常情况下,对于真正的东西,wayyy到high)
currentAngle=currentAngle%360;//获取0-360余数
if(数学绝对值(目标角度-当前角度)>=转动速度){
var addto=0
if(目标角度-当前角度<0){
addto=360
}

如果(targetAngle-currentAngle+addto我刚刚注意到一个小问题,如果当前角度为0,目标角度为90,那么它会下降到-90,有什么办法可以解决吗?是的,我只是在考虑数学问题,并注意到转弯时出现了一些错误;我现在正在绘制范围以检查公式。给我一分钟时间……我建议进行编辑,我认为有效,因为当
currentAngle
大于
targetAngle
时,您的公式无法处理。它没有正确反转。我查看了电子表格中的值以找出错误,可以通过更多的数学和if检查来完成,或者只是增加值。我接受了您的编辑以反映更改。谢谢你的工作太棒了!我建议进行另一次编辑来检查角度是否为负值或大于360度。我刚刚注意到一个小问题,如果当前角度为0,目标角度为90,那么它将下降到-90,有什么办法可以解决吗?是的,我只是在考虑数学问题,并注意到转弯时出现了一些错误;我正在绘制范围以进行检查e公式。给我一分钟……我建议了一个我认为有效的编辑,因为当
currentAngle
大于
targetAngle
时,您的公式无法处理。它没有正确地反转。我查看了电子表格中的值以找出错误,可以通过更多的数学和if检查,或者只是增加值。我接受了您的编辑以反映更改。非常感谢您的工作!我建议进行另一次编辑以检查角度是否为负值或大于360。