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();

Конзолата изхвърля „Не може да прочете „атрибути“ на свойство на undefined.“. Това бъг ли е? Търсих в 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
Оставете картите. Сега премахнете вашите геометрии и ги заменете само с 2 BoxGeometrys.   -  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
FYI. Първоначалното ми подозрение беше, че не сте посочили UVs във вашия модел. Въз основа на първия ви коментар обаче заключих, че не това е проблемът.   -  person WestLangley    schedule 03.12.2014
comment
Мога да обединя цялата геометрия в една (както в кода, поставен във въпроса ми) и тя работи страхотно и се изобразява страхотно, без значение дали обединявам цилиндър с кутия, но когато добавя материалите, това е, когато се срива и ми подхвърля, че атрибутите са недефинирани, зададох подобен въпрос и никой не даде отговор, така че реших да си отговоря сам и ето какво заключих (не знам дали сте съгласни): stackoverflow.com/questions/ 27217388/   -  person Edgar Alexander    schedule 03.12.2014