Exported JSON to THREE.js some models are upside down and wrong scale.
I am using Physijs for Physics and I have parsed the JSON file and added physics to all the models. But when they are added to the scene some models are upside down and wrong scale.
The models with this problem were also upside down and wrong scale in Clara.io after being imported. I used the online editor to rotate and scale them to look better in my scene. Now I realize that part of the problem might be I am parsing the JSON myself and adding Physijs wrappers to everything. Just wondering if there might be a more elegant way to set the models rotation and positions? I'm pretty new to THREE.js and Physi.js but not new to JS. The JSON file is pretty large I could put that in Google Drive if someone wants to take a look.
SIDE NOTE:There are a lot of great things in WebGL but not a lot with Physics. It's a shame the Physijs project was abandoned. I found it to perform very nice in complex scenes.
office_loader = new THREE.ObjectLoader();
office_loader.load("office-scene.json",function ( obj ) {
var i;
for ( i = 0 ; i < obj.children.length; i++) {
switch(obj.children[i].name){
case "better_cup":
better_cup = new Physijs.BoxMesh( obj.children[i].children[0].geometry, obj.children[0].children[0].material);
better_cup.castShadow = true;
better_cup.receieveShadow = true;
better_cup.name = "better_cup";
scene.add( better_cup );
break;
case "chair_2":
//parent object
var chair_complete = new Physijs.BoxMesh(
new THREE.CubeGeometry( 100, 100, 100 ),
new THREE.MeshBasicMaterial({transparent: true, opacity: 0})
);
chair_complete.rotation.x = 1;
//child objects
var chair_legs = new THREE.Mesh(
obj.children[i].children[0].children[0].geometry, obj.children[i].children[0].children[0].material);
chair_legs.castShadow = true;
chair_legs.receieveShadow = true;
chair_legs.name = "chair_legs";
//chair_legs.scale.set( new THREE.Vector3( 1, 1, 1 ));
chair_complete.add( chair_legs );
var chair_lean_group = new THREE.Mesh(
obj.children[i].children[0].children[1].children[0].children[0].geometry,
obj.children[i].children[0].children[1].children[0].children[0].material
)
chair_lean_group.castShadow = true;
chair_lean_group.receieveShadow = true;
chair_lean_group.name = "chair_seat_back"
chair_complete.add( chair_lean_group );
var chair_mech = new THREE.Mesh(
obj.children[i].children[0].children[1].children[1].geometry,
obj.children[i].children[0].children[1].children[1].material
);
chair_mech.castShadow = true;
chair_mech.receieveShadow = true;
chair_mech.name = "chair_mech"
chair_complete.add( chair_mech );
var chair_seat_back = new THREE.Mesh(
obj.children[i].children[0].children[1].children[2].geometry,
obj.children[i].children[0].children[1].children[2].material
);
chair_seat_back.castShadow = true;
chair_seat_back.receieveShadow = true;
chair_seat_back.name = "chair_seat_back"
chair_complete.add( chair_seat_back );
var chair_wheels = new THREE.Mesh(
obj.children[i].children[0].children[2].geometry,
obj.children[i].children[0].children[2].material
);
chair_wheels.castShadow = true;
chair_wheels.receieveShadow = true;
chair_wheels.name = "chair_wheels";
chair_complete.add( chair_wheels );
/* THIS WORKS COMPOUND OBJECTS ARE EASY TO MAKE*/
scene.add( chair_complete );
break;
case "Ground":
Ground = new Physijs.BoxMesh( obj.children[i].geometry, obj.children[i].material );
Ground.castShadow = true;
Ground.receieveShadow = true;
Ground.name = "Ground";
//Ground.rotation.set(new THREE.Vector3( 0, 0, 0));
// Ground.rotation.x = .8
//Ground.scale.set( new THREE.Vector3( .5,.5,.5));
Ground.position.set(0, 0, 20);
scene.add( Ground );
break;
case "monitor_root":
monitor_root = new Physijs.BoxMesh(
obj.children[i].children[0].geometry,
obj.children[i].children[0].material
);
monitor_root.castShadow = true;
monitor_root.receieveShadow = true;
monitor_root.name = "monitor_root";
scene.add( monitor_root );
break;
case "table":
box14 = new Physijs.BoxMesh(
obj.children[i].children[0].geometry,
obj.children[i].children[0].material,
);
box14.castShadow = true;
box14.receieveShadow = true;
box14.name = "box14";
scene.add( box14 );
var j,k;
var table_array = [];
for ( j=0; j < obj.children[i].children[1].children.length; j++ ){
var new_box = new Physijs.BoxMesh(
obj.children[i].children[1].children[j].geometry,
obj.children[i].children[1].children[0].material
);
table_array.push(new_box);
}
for (k=0; k < table_array.length; k++ ) {
table_array[k].castShadow = true;
table_array[k].receieveShadow = true;
table_array[k].name = "box" + k.toString();
scene.add( table_array[k] );
}
}
}
});