#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. Я проверил действительный объект, он работает нормально.