MeshFaceMaterial не работает должным образом

У меня есть этот метод:

  self.create_from_prototype_1 = function (x, y, z, body_textures, left_leg_textures, right_leg_textures) {
    var body_geo = new THREE.Geometry();
    var left_leg_geo = new THREE.Geometry();
    var right_leg_geo = new THREE.Geometry();

    self.merge_parts(body_geo, self.get_face(x, y, z), 0);
    self.merge_parts(body_geo, self.get_head(x, y, z), 1);
    self.merge_parts(body_geo, self.get_neck(x, y, z), 2);
    self.merge_parts(body_geo, self.get_body_front(x, y, z), 3);
    self.merge_parts(body_geo, self.get_body(x, y, z), 4);
    self.merge_parts(body_geo, self.get_left_arm(x, y, z), 5);
    self.merge_parts(body_geo, self.get_right_arm(x, y, z), 6);
    self.merge_parts(body_geo, self.get_left_forearm(x, y, z), 7);
    self.merge_parts(body_geo, self.get_right_forearm(x, y, z), 8);
    self.merge_parts(body_geo, self.get_left_hand(x, y, z), 9);
    self.merge_parts(body_geo, self.get_right_hand(x, y, z), 10);

    self.merge_parts(left_leg_geo, self.get_left_leg(x, y, z), 0);
    self.merge_parts(left_leg_geo, self.get_left_thigh(x, y, z), 1);
    self.merge_parts(left_leg_geo, self.get_left_foot(x, y, z), 2);

    self.merge_parts(right_leg_geo, self.get_right_leg(x, y, z), 0);
    self.merge_parts(right_leg_geo, self.get_right_thigh(x, y, z), 1);
    self.merge_parts(right_leg_geo, self.get_right_foot(x, y, z), 2);

    var body_materials = [];
    var left_leg_materials = [];
    var right_leg_materials = [];
    var i;

    for (i = 0; i <= 10; i++) {
      body_materials.push(new THREE.MeshBasicMaterial({
        map : body_textures[ i ]
      }));
    }

    for (i = 0; i <= 2; i++) {
      left_leg_materials.push(new THREE.MeshBasicMaterial({
        map : left_leg_textures[ i ]
      }));
    }

    for (i = 0; i <= 2; i++) {
      right_leg_materials.push(new THREE.MeshBasicMaterial({
        map : right_leg_textures[ i ]
      }));
    }

    var body = new THREE.Mesh(body_geo); // no textures yet :/
    body.geometry.computeFaceNormals();
    body.geometry.computeVertexNormals();

    var left_leg = new THREE.Mesh(left_leg_geo); // no textures yet :/
    left_leg.geometry.computeFaceNormals();
    left_leg.geometry.computeVertexNormals();

    var right_leg = new THREE.Mesh(right_leg_geo); // no textures yet :/
    right_leg.geometry.computeFaceNormals();
    right_leg.geometry.computeVertexNormals();

    Game.scene.add(body);
    Game.scene.add(left_leg);
    Game.scene.add(right_leg);

    return {
      body : body, 
      left_leg : left_leg, 
      right_leg : right_leg
    };
  }

Он работает идеально и правильно отображает окончательную сетку, НО если я не добавляю к ней материалы. Однако, если я добавлю массивы материалов, которые я создал выше, используя объект MeshFaceMaterial следующим образом:

var body = new THREE.Mesh(body_geo, new THREE.MeshFaceMaterial(body_materials)); // no textures yet :/
body.geometry.computeFaceNormals();
body.geometry.computeVertexNormals();

var left_leg = new THREE.Mesh(left_leg_geo, new THREE.MeshFaceMaterial(left_leg_materials)); // no textures yet :/
left_leg.geometry.computeFaceNormals();
left_leg.geometry.computeVertexNormals();

var right_leg = new THREE.Mesh(right_leg_geo, new THREE.MeshFaceMaterial(right_leg_materials)); // no textures yet :/
right_leg.geometry.computeFaceNormals();
right_leg.geometry.computeVertexNormals();

Консоль выдает "Невозможно прочитать атрибуты свойства неопределенного". Это ошибка? Я искал в Google и проверял свой код в течение всего дня, и я не могу найти никакого решения, связанного с этой проблемой (я даже пытался загрузить и добавить MeshBasicMaterials для текстур напрямую, и ни один из них не работал). любая помощь..? Спасибо!


person Edgar Alexander    schedule 02.12.2014    source источник
comment
Будет ли это работать, если вы удалите материал map и установите вместо него материал color?   -  person WestLangley    schedule 03.12.2014
comment
Нет, это то же самое поведение :/   -  person Edgar Alexander    schedule 03.12.2014
comment
Оставьте карты. Теперь удалите свои геометрии и замените их всего двумя BoxGeometry.   -  person WestLangley    schedule 03.12.2014
comment
Эй, я только что сделал две коробки и сработало, я сделал это с 2 цилиндрами и тоже сработало, похоже, проблема возникает, когда я пытаюсь объединить две геометрии с разными типами, это как должно работать? Я неправильно использую метод?   -  person Edgar Alexander    schedule 03.12.2014
comment
Извините, я не могу помочь вам отладить ваш код. Однако WebGL поддерживает только один материал для каждой геометрии, поэтому средство визуализации все равно разбивает вашу объединенную геометрию на части перед рендерингом. Не вижу смысла тут сливаться.   -  person WestLangley    schedule 03.12.2014
comment
Понятно, спасибо, что нашли время ответить на мой вопрос.   -  person Edgar Alexander    schedule 03.12.2014
comment
к вашему сведению. Мое первоначальное подозрение заключалось в том, что вы не указали UV в своей модели. Однако, основываясь на вашем первом комментарии, я пришел к выводу, что проблема не в этом.   -  person WestLangley    schedule 03.12.2014
comment
Я могу объединить всю геометрию в одну (как в коде, указанном в моем вопросе), и он отлично работает и отлично визуализирует, независимо от того, объединяю ли я цилиндр с коробкой, но когда я добавляю материалы, он падает. и выдает мне, что атрибуты не определены, я задал вопрос, похожий на этот, и никто не дал ответа, поэтому я решил ответить сам, и вот что я сделал (я не знаю, согласны ли вы): stackoverflow.com/questions/ 27217388/   -  person Edgar Alexander    schedule 03.12.2014