Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.08 KB | None | 0 0
  1.     public HalfEdgeMesh(Mesh mesh) {  
  2.         float[] pos = mesh.getPos();
  3.         float[] norms = mesh.getNorms();
  4.         int[] inds = mesh.getInds();
  5.  
  6.         halfEdges = new ArrayList<>();
  7.         vertices = new ArrayList<>();
  8.  
  9.         // Hint: You will need multiple passes of the arrays to set up
  10.         // each geometry object. A suggestion is to:
  11.         //   (1) Create vertex list
  12.         for(int i = 0 ; i < pos.length ; i+=3){
  13.             Vertex v = new Vertex(i/3, pos[i], pos[i+1], pos[i+2], norms[i], norms[i+1], norms[i+2]);
  14.             vertices.add(v);
  15.         }
  16.  
  17.         System.out.println("FIRST INDICES: "+ inds[0]+","+inds[1]+","+inds[2]+","+inds[3]+","+inds[4]);
  18.         System.out.println("vertex id1: "+vertices.get(inds[0]).getId());
  19.         System.out.println("vertex id2: "+vertices.get(inds[1]).getId());
  20.         System.out.println("vertex id3: "+vertices.get(inds[2]).getId());
  21.         System.out.println("vertex id4: "+vertices.get(inds[3]).getId());
  22.         System.out.println("vertex id5: "+vertices.get(inds[4]).getId());
  23.         //   (2) Create half edge list and set faces
  24.         for(int i = 0; i < inds.length ; i+=3){
  25.  
  26.             HalfEdge ed1 = new HalfEdge();
  27.             HalfEdge ed2 = new HalfEdge();
  28.             HalfEdge ed3 = new HalfEdge();
  29.            
  30.             ed1.setNextV(vertices.get(inds[i+1]));
  31.             ed2.setNextV(vertices.get(inds[i+2]));
  32.             ed3.setNextV(vertices.get(inds[i]));
  33.  
  34.             vertices.get(inds[i]).setEdge(ed1);
  35.             vertices.get(inds[i+1]).setEdge(ed2);
  36.             vertices.get(inds[i+2]).setEdge(ed3);
  37.  
  38.             Face fc = new Face(ed1);
  39.             ed1.setlFace(fc);
  40.             ed2.setlFace(fc);
  41.             ed3.setlFace(fc);
  42.  
  43.             ed1.setNextE(ed2);
  44.             ed2.setNextE(ed3);
  45.             ed3.setNextE(ed1);
  46.  
  47.             halfEdges.add(ed1);
  48.             halfEdges.add(ed2);
  49.             halfEdges.add(ed3);
  50.  
  51.         }
  52.  
  53.  
  54.         //   (3) Set flip edges
  55.         HashMap<String,HalfEdge> halfEdgeMap = new HashMap<String,HalfEdge>();
  56.         //make key value pair of vertices and corresponding halfedge
  57.         //string is composed of vertex ID
  58.         for(int i = 0 ; i<inds.length ; i+=3){
  59.             String str1 = Integer.toString(vertices.get(inds[i]).getId())+","+Integer.toString(vertices.get(inds[i+1]).getId());
  60.             String str2 = Integer.toString(vertices.get(inds[i+1]).getId())+","+Integer.toString(vertices.get(inds[i+2]).getId());
  61.             String str3 = Integer.toString(vertices.get(inds[i+2]).getId())+","+Integer.toString(vertices.get(inds[i]).getId());
  62.  
  63.             HalfEdge ed1 = halfEdges.get(i);
  64.             HalfEdge ed2 = halfEdges.get(i+1);
  65.             HalfEdge ed3 = halfEdges.get(i+2);
  66.  
  67.             halfEdgeMap.put(str1,ed1);
  68.             halfEdgeMap.put(str2,ed2);
  69.             halfEdgeMap.put(str3,ed3);
  70.         }
  71.  
  72.         for(int i = 0 ; i< inds.length; i+=3){
  73.             String str1 = Integer.toString(vertices.get(inds[i]).getId())+","+Integer.toString(vertices.get(inds[i+1]).getId());
  74.             String str2 = Integer.toString(vertices.get(inds[i+1]).getId())+","+Integer.toString(vertices.get(inds[i+2]).getId());
  75.             String str3 = Integer.toString(vertices.get(inds[i+2]).getId())+","+Integer.toString(vertices.get(inds[i]).getId());
  76.  
  77.             String flipStr1 = Integer.toString(vertices.get(inds[i+1]).getId())+","+Integer.toString(vertices.get(inds[i]).getId());
  78.             String flipStr2 = Integer.toString(vertices.get(inds[i+2]).getId())+","+Integer.toString(vertices.get(inds[i+1]).getId());
  79.             String flipStr3 = Integer.toString(vertices.get(inds[i]).getId())+","+Integer.toString(vertices.get(inds[i+2]).getId());
  80.  
  81.             halfEdgeMap.get(str1).setFlipE(halfEdgeMap.get(flipStr1));
  82.             halfEdgeMap.get(str2).setFlipE(halfEdgeMap.get(flipStr2));
  83.             halfEdgeMap.get(str3).setFlipE(halfEdgeMap.get(flipStr3));
  84.         }
  85.         // student code starts here
  86.  
  87.         System.out.println("vertices: "+ vertices.size());
  88.         //System.out.println("HALF EDGES: "+ halfEdges);
  89.  
  90.  
  91.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement