-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOBJ.js
50 lines (49 loc) · 1.76 KB
/
OBJ.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* OBJ.js
* Loads an OBJ file by using THREE JS examples provided OBJ loader,
* adapted to be compatible with the rest of the pipeline.
* Author : Quentin Plessis
*/
function loadOBJ(i, initObj, obj, mtl) {
var loader = new THREE.OBJMTLLoader();
loader.addEventListener('load', function (event) {
objects[i] = event.content;
objects[i].composedObject = true;
objects[i].traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.saveMaterial = jQuery.extend(true, {}, child.material);
child.previousModelMatrix = new THREE.Matrix4();
child.previousModelMatrix.copy(child.matrixWorld);
}
});
objects[i].updateModelMatrix = function() {
this.traverse(function (child) {
if (child instanceof THREE.Mesh)
child.previousModelMatrix.copy(child.matrixWorld);
});
};
objects[i].setMaterial = function(material) {
this.traverse(function (child) {
if (child instanceof THREE.Mesh)
child.setMaterial(material);
});
};
objects[i].setShaderMaterial = function(shader) {
this.traverse(function (child) {
if (child instanceof THREE.Mesh) {
shader.setUniform('matDiffuseColor', 'v4', child.saveMaterial.params.diffuse);
shader.setUniform('matDiffuse', 'f', 1.0);
shader.setUniform('isTextured', 'i', child.saveMaterial.params.diffuseMap == null ? 0 : 1);
shader.setUniform('diffMap', 't', child.saveMaterial.params.diffuseMap);
shader.setUniform('matSpecularColor', 'v4', child.saveMaterial.params.specular);
shader.setUniform('matSpecular', 'f', 0.3);
shader.setUniform('shininess', 'f', 5.0);
shader.setUniform('previousModelMatrix', 'm4', child.previousModelMatrix);
child.setMaterial(shader.createMaterial());
}
});
};
initObj();
});
loader.load(obj, mtl);
}