Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ObjParser {
- public static float vertices[];
- public static float normals[];
- public static short faces[];
- public static short normalIndices[];
- public static short texCoords[];
- public static void parse(InputStream is) throws NumberFormatException,
- IOException {
- ArrayList<Float> vl = new ArrayList<Float>();
- ArrayList<Float> nl = new ArrayList<Float>();
- ArrayList<Short> fl = new ArrayList<Short>();
- ArrayList<Short> ni = new ArrayList<Short>();
- ArrayList<Short> tc = new ArrayList<Short>();
- String in = null;
- InputStreamReader isr = new InputStreamReader(is);
- BufferedReader br = new BufferedReader(isr);
- while ((in = br.readLine()) != null) {
- if (in.startsWith("vn")) {
- in = in.substring(3);
- for (int i = 0; i < 3; i++) {
- nl.add(Float.parseFloat(in.split(" ")[i]));
- }
- } else if (in.startsWith("v")) {
- in = in.substring(2);
- for (int i = 0; i < 3; i++) {
- vl.add(Float.parseFloat(in.split(" ")[i]));
- }
- } else if (in.startsWith("f")) {
- in = in.substring(2);
- if (in.contains("//")) {
- for (int i = 0; i < 3; i++) {
- short index[] = parseIndex(in.split(" ")[i]);
- fl.add((short) (index[0] - 1));
- ni.add((short) (index[1] - 1));
- }
- } else if (slashCount(in) == 2) {
- // Parse faces, normals and texcoords
- } else if (slashCount(in) == 1) {
- // parse faces and texcoords
- } else {
- for (int i = 0; i < 3; i++) {
- fl.add((short) (Integer.parseInt(in.split(" ")[i]) - 1));
- }
- }
- }
- }
- br.close();
- vertices = new float[vl.size()];
- for (int i = 0; i < vl.size(); i++) {
- Float f = vl.get(i);
- vertices[i] = (f != null ? f : 0.0f);
- }
- normals = new float[nl.size()];
- for (int i = 0; i < nl.size(); i++) {
- Float f = nl.get(i);
- normals[i] = (f != null ? f : 0.0f);
- }
- faces = new short[fl.size()];
- for (int i = 0; i < fl.size(); i++) {
- Short s = fl.get(i);
- faces[i] = (s != null ? s : 0);
- }
- normalIndices = new short[ni.size()];
- for (int i = 0; i < ni.size(); i++) {
- Short s = ni.get(i);
- normalIndices[i] = (s != null ? s : 0);
- }
- }
- private static int slashCount(String in) {
- return 0;
- }
- private static short[] parseIndex(String in) {
- short[] indices = new short[2];
- for (int i = 0; i < 2; i++) {
- indices[i] = Short.parseShort(in.split("//")[i]);
- }
- return indices;
- }
- public static void toFile() {
- String s = "";
- for (int i = 0; i < vertices.length; i += 3) {
- s += "v " + vertices[i] + " " + vertices[i + 1] + " "
- + vertices[i + 2] + "\n";
- }
- for (int i = 0; i < normals.length; i += 3) {
- s += "vn " + normals[i] + " " + normals[i + 1] + " "
- + normals[i + 2] + "\n";
- }
- s += "s off\n";
- for (int i = 0; i < faces.length; i += 3) {
- s += "f " + ++faces[i] + "//" + ++normalIndices[i] + " "
- + ++faces[i + 1] + "//" + ++normalIndices[i + 1] + " "
- + ++faces[i + 2] + "//" + ++normalIndices[i + 2] + "\n";
- }
- FileWriter f = null;
- try {
- f = new FileWriter("log.txt");
- f.write(s);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- try {
- f.flush();
- f.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment