private List<Triangle> read(BufferedReader reader) throws IOException {
        List<Vector3> vertices = new ArrayList<Vector3>();
        List<Vector3> normals = new ArrayList<Vector3>();
        
        List<Triangle> result = new ArrayList<Triangle>();        
        Vector3 triangleVertices[] = new Vector3[3];
        Vector3 triangleNormals[] = new Vector3[3];
        
        String line;
        
        while ((line = reader.readLine()) != null) {
            String elements[] = line.split(" ");
            
            if (elements.length == 4) {
                if (elements[0].equals("v")) {
                    vertices.add(new Vector3(Double.parseDouble(elements[1]), Double.parseDouble(elements[2]), Double.parseDouble(elements[3])));
                } else if (elements[0].equals("vn")) {
                    normals.add(new Vector3(Double.parseDouble(elements[1]), Double.parseDouble(elements[2]), Double.parseDouble(elements[3])));
                } else if (elements[0].equals("f")) {
                    for (int i = 0; i < 3; i++) {
                        String values[] = elements[i + 1].split("/");
                        triangleVertices[i] = vertices.get(Integer.parseInt(values[0]) - 1);
                        triangleNormals[i] = normals.get(Integer.parseInt(values[2]) - 1);
                    }
                    result.add(new Triangle(
                            material, 
                            triangleVertices[0],
                            triangleVertices[1],
                            triangleVertices[2],
                            triangleNormals[0],
                            triangleNormals[1],
                            triangleNormals[2]                            
                    ));
                }
            }
        }
        
        return result;
    }