Beispiel #1
0
  public Obj loadObj(Context context, String name) throws IOException {
    BufferedReader reader =
        new BufferedReader(new InputStreamReader(context.getAssets().open(name)));
    String line = reader.readLine();
    ArrayList<Float> normalList = new ArrayList<>();
    ArrayList<Float> vertexList = new ArrayList<>();
    ArrayList<Float> uvList = new ArrayList<>();

    float xScale = 0;
    float yScale = 0;
    float zScale = 0;

    Obj obj = new Obj();

    while (line != null) {
      Utils.print("Processing line: " + line);
      String[] lineSplit = line.split("\\s+");

      if (lineSplit.length > 0) {
        if (lineSplit[0].compareTo(COMMENT) == 0) {
          Utils.print("Comment, IGNORING LINE ");
        } else if (lineSplit[0].compareTo(MAT_REF) == 0) {
          Utils.print("Material Reference: " + lineSplit[1]);
          if (obj.getCurrGroup() == null) {
            Utils.print("Malformed file, no object declared");
            return null;
          }
          if (obj.getMatLib() == null) {
            Utils.print("Malformed file, no materialLib declared");
            return null;
          }
          obj.setGroupMat(lineSplit[1]);
        } else if (lineSplit[0].compareTo(SMOOTHING) == 0) {
          Utils.print("Smoothing");
        } else if (lineSplit[0].compareTo(MAT_LIB) == 0) {
          Utils.print("Material Library: " + lineSplit[1]);
          obj.setMatLib(new MaterialLib(context, lineSplit[1]));
        } else if (lineSplit[0].compareTo(OBJECT) == 0) {
          Utils.print("Object name: " + lineSplit[1]);
          obj.name = lineSplit[1];
        } else if (lineSplit[0].compareTo(FACE) == 0) {
          float[] faceTris = parseFace(lineSplit, vertexList, normalList, uvList);
          for (int i = 0; i < faceTris.length; i++) {
            obj.getCurrGroup().floatBuffer.add(faceTris[i]);
          }
        } else if (lineSplit[0].compareTo(GROUP) == 0) {
          Utils.print("Group: " + lineSplit[1]);
          obj.createGroup(lineSplit[1]);
        } else {
          float x = Float.parseFloat(lineSplit[1]);
          float y = Float.parseFloat(lineSplit[2]);
          if (lineSplit[0].compareTo(VERTEX) == 0) {
            float z = Float.parseFloat(lineSplit[3]);
            vertexList.add(x);
            vertexList.add(y);
            vertexList.add(z);
            if (Math.abs(x) > xScale) {
              xScale = Math.abs(x);
            }
            if (Math.abs(y) > yScale) {
              yScale = Math.abs(y);
            }
            if (Math.abs(z) > zScale) {
              zScale = Math.abs(z);
            }
          } else if (lineSplit[0].compareTo(NORMAL) == 0) {
            float z = Float.parseFloat(lineSplit[3]);
            normalList.add(x);
            normalList.add(y);
            normalList.add(z);
          } else if (lineSplit[0].compareTo(UV) == 0) {
            uvList.add(x);
            uvList.add(y);
          }
        }
        line = reader.readLine();
      }
    }
    ;
    // gUtils.print("Created Object: " + obj.toString());
    return obj;
  }