wststreet

Untitled

Apr 19th, 2013
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.32 KB | None | 0 0
  1. public class ObjParser {
  2.     public static float vertices[];
  3.     public static float normals[];
  4.     public static short faces[];
  5.     public static short normalIndices[];
  6.     public static short texCoords[];
  7.  
  8.     public static void parse(InputStream is) throws NumberFormatException,
  9.             IOException {
  10.         ArrayList<Float> vl = new ArrayList<Float>();
  11.         ArrayList<Float> nl = new ArrayList<Float>();
  12.         ArrayList<Short> fl = new ArrayList<Short>();
  13.         ArrayList<Short> ni = new ArrayList<Short>();
  14.         ArrayList<Short> tc = new ArrayList<Short>();
  15.         String in = null;
  16.         InputStreamReader isr = new InputStreamReader(is);
  17.         BufferedReader br = new BufferedReader(isr);
  18.  
  19.         while ((in = br.readLine()) != null) {
  20.             if (in.startsWith("vn")) {
  21.                 in = in.substring(3);
  22.                 for (int i = 0; i < 3; i++) {
  23.                     nl.add(Float.parseFloat(in.split(" ")[i]));
  24.                 }
  25.             } else if (in.startsWith("v")) {
  26.                 in = in.substring(2);
  27.                 for (int i = 0; i < 3; i++) {
  28.                     vl.add(Float.parseFloat(in.split(" ")[i]));
  29.                 }
  30.             } else if (in.startsWith("f")) {
  31.                 in = in.substring(2);
  32.                 if (in.contains("//")) {
  33.                     for (int i = 0; i < 3; i++) {
  34.                         short index[] = parseIndex(in.split(" ")[i]);
  35.                         fl.add((short) (index[0] - 1));
  36.                         ni.add((short) (index[1] - 1));
  37.                     }
  38.                 } else if (slashCount(in) == 2) {
  39.                     // Parse faces, normals and texcoords
  40.                 } else if (slashCount(in) == 1) {
  41.                     // parse faces and texcoords
  42.                 } else {
  43.                     for (int i = 0; i < 3; i++) {
  44.                         fl.add((short) (Integer.parseInt(in.split(" ")[i]) - 1));
  45.                     }
  46.                 }
  47.             }
  48.         }
  49.         br.close();
  50.  
  51.         vertices = new float[vl.size()];
  52.         for (int i = 0; i < vl.size(); i++) {
  53.             Float f = vl.get(i);
  54.             vertices[i] = (f != null ? f : 0.0f);
  55.  
  56.         }
  57.  
  58.         normals = new float[nl.size()];
  59.         for (int i = 0; i < nl.size(); i++) {
  60.             Float f = nl.get(i);
  61.             normals[i] = (f != null ? f : 0.0f);
  62.  
  63.         }
  64.  
  65.         faces = new short[fl.size()];
  66.         for (int i = 0; i < fl.size(); i++) {
  67.             Short s = fl.get(i);
  68.             faces[i] = (s != null ? s : 0);
  69.         }
  70.  
  71.         normalIndices = new short[ni.size()];
  72.         for (int i = 0; i < ni.size(); i++) {
  73.             Short s = ni.get(i);
  74.             normalIndices[i] = (s != null ? s : 0);
  75.         }
  76.  
  77.     }
  78.  
  79.     private static int slashCount(String in) {
  80.  
  81.         return 0;
  82.     }
  83.  
  84.     private static short[] parseIndex(String in) {
  85.         short[] indices = new short[2];
  86.         for (int i = 0; i < 2; i++) {
  87.             indices[i] = Short.parseShort(in.split("//")[i]);
  88.  
  89.         }
  90.         return indices;
  91.     }
  92.  
  93.     public static void toFile() {
  94.         String s = "";
  95.         for (int i = 0; i < vertices.length; i += 3) {
  96.             s += "v " + vertices[i] + " " + vertices[i + 1] + " "
  97.                     + vertices[i + 2] + "\n";
  98.         }
  99.         for (int i = 0; i < normals.length; i += 3) {
  100.             s += "vn " + normals[i] + " " + normals[i + 1] + " "
  101.                     + normals[i + 2] + "\n";
  102.         }
  103.         s += "s off\n";
  104.         for (int i = 0; i < faces.length; i += 3) {
  105.             s += "f " + ++faces[i] + "//" + ++normalIndices[i]  + " "
  106.                     + ++faces[i + 1]  + "//" + ++normalIndices[i + 1]  + " "
  107.                     + ++faces[i + 2] + "//" + ++normalIndices[i + 2]  + "\n";
  108.         }
  109.  
  110.         FileWriter f = null;
  111.         try {
  112.             f = new FileWriter("log.txt");
  113.             f.write(s);
  114.         } catch (IOException e) {
  115.             // TODO Auto-generated catch block
  116.             e.printStackTrace();
  117.         }
  118.        
  119.         try {
  120.             f.flush();
  121.             f.close();
  122.         } catch (IOException e) {
  123.             // TODO Auto-generated catch block
  124.             e.printStackTrace();
  125.         }
  126.  
  127.     }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment