public OBJModel(String fileName){
		positions = new ArrayList<>();
		texCoords = new ArrayList<>();
		normals = new ArrayList<>();
		indices = new ArrayList<>();
		hasTexCoords = false;
		hasNormals = false;
		
		BufferedReader meshReader;
		
		try{
			meshReader = new BufferedReader(new FileReader(fileName));
			String line;
			
			while((line = meshReader.readLine()) != null){
				String[] tokens = line.split(" ");
				tokens = Util.removeEmptyStrings(tokens);
				
				if(tokens.length == 0 || tokens[0].equals("#"))
					continue;
				else if(tokens[0].equals("v")){
					positions.add(new Vector3d(Double.valueOf(tokens[1]),
							Double.valueOf(tokens[2]),
							Double.valueOf(tokens[3])));
				}
				else if(tokens[0].equals("vt")){
					texCoords.add(new Vector2d(Double.valueOf(tokens[1]),
							Double.valueOf(tokens[2])));
				}
				else if(tokens[0].equals("vn")){
					normals.add(new Vector3d(Double.valueOf(tokens[1]),
							Double.valueOf(tokens[2]),
							Double.valueOf(tokens[3])));
				}
				else if(tokens[0].equals("f")){
					//Generic method for any number of triangles in a face.
					//e.g. Adds an extra face if the .obj exports as quad, not triangle:
					for(int i=0; i<(tokens.length-3); i++){
						indices.add(parseOBJIndex(tokens[1]));
						indices.add(parseOBJIndex(tokens[2 + i]));
						indices.add(parseOBJIndex(tokens[3 + i]));
					}
				}
			}
			
			meshReader.close();
		}catch(Exception e){
			e.printStackTrace();
			System.exit(1);
		}
	}