Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public HalfEdgeMesh(Mesh mesh) {
- float[] pos = mesh.getPos();
- float[] norms = mesh.getNorms();
- int[] inds = mesh.getInds();
- halfEdges = new ArrayList<>();
- vertices = new ArrayList<>();
- // Hint: You will need multiple passes of the arrays to set up
- // each geometry object. A suggestion is to:
- // (1) Create vertex list
- for(int i = 0 ; i < pos.length ; i+=3){
- Vertex v = new Vertex(i/3, pos[i], pos[i+1], pos[i+2], norms[i], norms[i+1], norms[i+2]);
- vertices.add(v);
- }
- System.out.println("FIRST INDICES: "+ inds[0]+","+inds[1]+","+inds[2]+","+inds[3]+","+inds[4]);
- System.out.println("vertex id1: "+vertices.get(inds[0]).getId());
- System.out.println("vertex id2: "+vertices.get(inds[1]).getId());
- System.out.println("vertex id3: "+vertices.get(inds[2]).getId());
- System.out.println("vertex id4: "+vertices.get(inds[3]).getId());
- System.out.println("vertex id5: "+vertices.get(inds[4]).getId());
- // (2) Create half edge list and set faces
- for(int i = 0; i < inds.length ; i+=3){
- HalfEdge ed1 = new HalfEdge();
- HalfEdge ed2 = new HalfEdge();
- HalfEdge ed3 = new HalfEdge();
- ed1.setNextV(vertices.get(inds[i+1]));
- ed2.setNextV(vertices.get(inds[i+2]));
- ed3.setNextV(vertices.get(inds[i]));
- vertices.get(inds[i]).setEdge(ed1);
- vertices.get(inds[i+1]).setEdge(ed2);
- vertices.get(inds[i+2]).setEdge(ed3);
- Face fc = new Face(ed1);
- ed1.setlFace(fc);
- ed2.setlFace(fc);
- ed3.setlFace(fc);
- ed1.setNextE(ed2);
- ed2.setNextE(ed3);
- ed3.setNextE(ed1);
- halfEdges.add(ed1);
- halfEdges.add(ed2);
- halfEdges.add(ed3);
- }
- // (3) Set flip edges
- HashMap<String,HalfEdge> halfEdgeMap = new HashMap<String,HalfEdge>();
- //make key value pair of vertices and corresponding halfedge
- //string is composed of vertex ID
- for(int i = 0 ; i<inds.length ; i+=3){
- String str1 = Integer.toString(vertices.get(inds[i]).getId())+","+Integer.toString(vertices.get(inds[i+1]).getId());
- String str2 = Integer.toString(vertices.get(inds[i+1]).getId())+","+Integer.toString(vertices.get(inds[i+2]).getId());
- String str3 = Integer.toString(vertices.get(inds[i+2]).getId())+","+Integer.toString(vertices.get(inds[i]).getId());
- HalfEdge ed1 = halfEdges.get(i);
- HalfEdge ed2 = halfEdges.get(i+1);
- HalfEdge ed3 = halfEdges.get(i+2);
- halfEdgeMap.put(str1,ed1);
- halfEdgeMap.put(str2,ed2);
- halfEdgeMap.put(str3,ed3);
- }
- for(int i = 0 ; i< inds.length; i+=3){
- String str1 = Integer.toString(vertices.get(inds[i]).getId())+","+Integer.toString(vertices.get(inds[i+1]).getId());
- String str2 = Integer.toString(vertices.get(inds[i+1]).getId())+","+Integer.toString(vertices.get(inds[i+2]).getId());
- String str3 = Integer.toString(vertices.get(inds[i+2]).getId())+","+Integer.toString(vertices.get(inds[i]).getId());
- String flipStr1 = Integer.toString(vertices.get(inds[i+1]).getId())+","+Integer.toString(vertices.get(inds[i]).getId());
- String flipStr2 = Integer.toString(vertices.get(inds[i+2]).getId())+","+Integer.toString(vertices.get(inds[i+1]).getId());
- String flipStr3 = Integer.toString(vertices.get(inds[i]).getId())+","+Integer.toString(vertices.get(inds[i+2]).getId());
- halfEdgeMap.get(str1).setFlipE(halfEdgeMap.get(flipStr1));
- halfEdgeMap.get(str2).setFlipE(halfEdgeMap.get(flipStr2));
- halfEdgeMap.get(str3).setFlipE(halfEdgeMap.get(flipStr3));
- }
- // student code starts here
- System.out.println("vertices: "+ vertices.size());
- //System.out.println("HALF EDGES: "+ halfEdges);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement