-
Notifications
You must be signed in to change notification settings - Fork 0
/
objloader.js
38 lines (34 loc) · 1.2 KB
/
objloader.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
class OBJLoader {
static fileReader = new FileReader();
static load(file) {
if (!file.name.endsWith(".obj")) return;
this.fileReader.onload = this.parse;
this.fileReader.readAsText(file);
}
static parse() {
let content = OBJLoader.fileReader.result;
let lines = content.split('\n');
let vertices = [];
let indices = [];
for (let i = 0; i < lines.length; i++) {
if (lines[i].startsWith("v ")) {
let split = lines[i].split(" ");
vertices.push(new Vector3(
parseFloat(split[1]),
parseFloat(split[2]),
parseFloat(split[3])
))
} else if (lines[i].startsWith("f ")) {
let split = lines[i].split(" ");
for (let j = 1; j < 4; j++) {
indices.push(parseInt(split[j].split("/")[0] - 1));
}
}
}
let colors = [];
for (let i = 0; i < vertices.length; i++) {
colors.push(new Color(Math.random(), Math.random(), Math.random()));
}
Global.activeModel = new Model(vertices, colors, indices);
}
}