Waitrud Weber’s blog

things and reminders for memories

3d: Java: Sorry for cutting edges: I remember, made mistakes: repairment from now:

20191110
Created 201402:
Sorry, I remember, made mistakes of cutting edges and placed the colde here.
We could open the part of source code as emergency: one of development records:



public class WireFrame :

---

	public LineMesh[] hideLines(Camera cam, Mesh mesh) {
		LineMesh[] l = print_lines(cam, mesh);
		
		return l;
	}

	private LineMesh[] print_lines(Camera cam, Mesh mesh) {
		LineMesh[] all_lines = onScreenLineMesh( cam, mesh);

		for(int i=0; i<all_lines.length; i++) {
			
			for(int j=0; j<mesh.faces.length; j++) {
				if ( all_lines[i].onFace != j ) {
					all_lines = hide_lines(cam, all_lines, i, mesh, j);
					
					if( i >= all_lines.length ) {
						break;
					}
				}
			}

		}

		all_lines = inWorld( cam, all_lines, mesh);
		
		return all_lines;
	}

---

	private Mesh create_visible_mesh(ZbufID[][] buf, Mesh mesh) {
		HashMap<Integer, Integer> has = new HashMap<Integer, Integer>();
		int count = 0;
		for(int j=0; j<buf.length; j++) {
			for(int i=0; i<buf[j].length; i++) {
				if (buf[j][i].id == -1) continue;
				
				if (!has.containsValue(new Integer(buf[j][i].id)) ) {
					has.put(new Integer(count), new Integer(buf[j][i].id));
					count ++;
				}
			}
		}
		
		System.out.println("reduce face number " + mesh.faces.length + " to " + count);
		
		int faces[][] = new int[has.size()][];
		for(int j=0; j<count; j++) {
			faces[j] = new int[3];
		}
		
		for (int i = 0; i<count; i++) {
			faces[i] = mesh.faces[has.get(new Integer(i)).intValue()];
		}
		
		//points
		int count_p = 0;
		HashMap<Integer, Integer> indexto = new HashMap<Integer, Integer>();
		HashMap<Integer, Point> has_p = new HashMap<Integer, Point>();
		for (int i = 0; i<count; i++) {
			faces[i] = mesh.faces[has.get(new Integer(i)).intValue()];
			for (int j = 0; j<3; j++) {
				Point p = mesh.points[faces[i][j]];
				if(!has_p.containsValue(p)) {
					has_p.put(new Integer(count_p), p);
					indexto.put(new Integer(faces[i][j]), new Integer(count_p));
					count_p ++;
				}
				
			}
		}

		Point[] ps = new Point[count_p];
		for (int i = 0; i<count_p; i++) {
			ps[i] = has_p.get(new Integer(i));
		}
		
		//revice face number
		for (int i = 0; i<count; i++) {
			faces[i] = mesh.faces[has.get(new Integer(i)).intValue()];
			for (int j = 0; j<3; j++) {
				int from = faces[i][j];
				faces[i][j] = indexto.get(new Integer(from)).intValue();
			}
		}
		
		Mesh v_mesh = new Mesh();
		
		v_mesh.faces = faces;
		v_mesh.points = ps;
		v_mesh.generate_faces_normal_counterclockwise();
		
		return v_mesh;
	}


---

	public LineMesh[] hide_line(Camera cam, Mesh mesh) {
		
		WireFrame wire = new WireFrame();
		buf = new ZbufID[cam.screen.disolution_x][cam.screen.disolution_y];
		for(int j=0; j<cam.screen.disolution_y; j++) {
			for(int i=0; i<cam.screen.disolution_x; i++) {
				buf[i][j] = new ZbufID();
				buf[i][j].z = Double.MAX_VALUE;
				buf[i][j].id = -1;
			}
		}

		for(int i=0; i<mesh.faces.length; i++) {
			buf = render_face_id(cam, i, mesh, buf);
			System.out.println("face num = " + i + "/" +( mesh.faces.length - 1));
		}
		Mesh v_mesh = create_visible_mesh(buf, mesh);
		
		LineMesh[] l = wire.hideLines(cam, v_mesh);
		
		return l;
	}

---