Three.js在运行时未将颜色更新为网格

时间:2019-06-11 22:44:07

标签: javascript three.js

好的,所以我试图用简单的动画创建一个简单的程序,该动画每2秒将交通灯的颜色从绿色变为红色,反之亦然,但是颜色没有改变。

我已经尝试调试代码,使应该使代码工作的布尔值打印出来,结果是正确的,但是颜色完全没有改变。试图更改的网格物体是称为bombilla的网格物体,它试图通过setInterval()每两秒钟调用一次的changeColor函数进行更改。

if(isset($_GET['id_fichier'])){
   $id   = $_GET['id_fichier'];  
   $stmt = $dbh->prepare("SELECT * from `fichier` where `id_fichier` = :id");
   $stmt->bindColumn(':id', $id);
   $stmt->execute();

   $data = $stat->fetch();
   $file = $data['fichier'];
   $type = $data['type'];
   header('Content-Type:'.$type);
   echo($file);
}

1 个答案:

答案 0 :(得分:1)

目前,您的代码有两个主要问题。

requesteAnimationFrame()被注释,因此场景仅被渲染一次,并且永远不会被渲染,从而使任何动画或对场景的更改都不相关。

更明显的问题是在动画循环中使用setInterval来控制何时更改材质颜色。您在每次更新帧时都在呼叫setInterval。这意味着,两秒钟后,材质将在每次更新帧时交换颜色。

您需要做的是检测自上次更新以来是否已经过了两秒钟,然后才执行changeColor函数。

使用THREE.Clock

可以轻松控制此逻辑
// global scope
var clock = new THREE.Clock(); //automatically starts clock

// update function
var update = function() {
  var time = clock.getElapsedTime(); // elapsed time since last reset
  if ( time > 2 ) {
    changeColor();
    clock.start(); // resets clock
  }
};

JSFiddle