Когда я обновляю цвет в OBJ, произошла ошибка в three.js ?

#three.js

#three.js

Вопрос:

Я динамически обновлялся в OBJ. Я получил ошибку в «TypeError: child.material.color не определен». Почему возникла эта ошибка, в чем была ошибка в моем коде.

 var loader = new THREE.OBJLoader( manager );
loader.load( file, function ( object ) { 
  object.traverse( function ( child ) {
    if ( child instanceof THREE.Mesh ) {
     // child.material.ambient.setHex(0xFF0000);

     if(object_color!=""){

      //alert("object color entere");

      object_color=object_color.replace('#', '')
      child.material.color.setHex("0x" object_color);
    }
    }
  } );      
  

Комментарии:

1. У вас есть файл .mtl (material) для этого файла .obj?

2. да, у меня есть файл материала

3. Но можно динамически изменять цвет

Ответ №1:

 child.material.color
  

Это рассеянный цвет геометрии. В случае файла Obj этот цвет будет определен для материала в соответствующем файле .mtl. Если у вас нет этого файла .mtl или материал, используемый вашей геометрией, не имеет диффузного цвета, определенного в файле .mtl, вы можете столкнуться с проблемой, с которой столкнулись.

Вы можете решить эту проблему, используя следующий код —

 if(child.material.color)
    child.material.color.setHex("0x" object_color);
else
    child.material.color = new THREE.Color("0x" object_color);
  

Комментарии:

1. Я протестировал приведенный выше код. введите в другую часть, но цвет еще не применен.

2. "0x" object_color вам нужно преобразовать строку в шестнадцатеричное значение.

3. Я проверил код, не проблема, у Obj есть проблема

Ответ №2:

Приведенный выше код не является проблемным, код работает правильно, проблема в том, что у вас есть obj. Я проверил действительный объект, он работает нормально.