Here is a layout of the design I had in mind: // Vertex: class to act as a vector. Maybe named inappropriately, but whatever. public class Vertex{ // Store the fields of the vector private double x, y, z; // Constructor. Sets the members Vertex( double _x, double _y, double _z ); // Return X double getX(); // Return Y double getY(); // Return Z double getZ(); // Normalize the vector void Normalize(); // Return the dotproduct of this and who double dotproduct( Vertex who ); // Translates the vector. Maybe this should be a generic matrix multiplication. // Will be changed in next version void Move( double mx, double my, double mz ); // Returns a copy of this object Vertex copy(); } // Edge: stores two vertexes public class Edge{ // Vertex 1, 2, and the color they should be private Vertex v1; private Vertex v2; private Color color; // Constructor sets the data members Edge( Vertex p1, Vertex p2, Color _color ); // Returns a copy of this object Edge copy(); // Draws a line between the two vertexes using a Camera object void Draw( Camera cam, int p1, int p2 ); // Returns a vertex which is the average of the other 2 vertexes Vertex Average(); // Translates the two vertexes void Move( double mx, double my, double mz ){ } // Face: stores multiple edges public class Face{ // List of edges private Vector edge_list; // Constructor initializes the edge_list Face(); // Adds an edge to the list void addEdge( Edge who ); // Draws the edges void Draw( Camera cam, int who ); // Returns an average vertex of all other edge averages Vertex Average(); // Translates all edges void Move( double mx, double my, double mz ); // Returns a copy of this object Face copy(); } // Obj3d: Stores multiple faces public class Obj3d{ // start : Vertex that object should move away from private Vertex start; // explode: How far the object should be from start private double explode; // face_list: list of faces private Vector face_list; // Constructor: sets the starting point and initializes the list Obj3d( Vertex _start ); // Adds a face to the list void addFace( Face who ); // Draws all the faces and the light lines void Draw( Camera cam ); // Returns an average of all the faces Vertex Average(); // Sets the exploding factor void Explode( double f ); } // Camera: stores all information about graphics and matrix math public class Camera{ // position vector private Vertex pos; // front, top, and right vectors of the camera private Vertex front, top, right; // personal graphics variable private Graphics graphic; // focal length of the camera private double epsilon; // Constructor: sets the position vector Camera( Vertex v ); // sets the graphics to the supplied graphics void setGraphics( Graphics g ); // Returns the graphics owned by the camera Graphics getGraphics(); // Calculates the right and top vectors given a position. void Reset(); // Rotates the camera around the X,Y,Z axis. void Rotate( double x, double y, double z ); // Moves the camera in the direction of the front vector void Thrust( double m ){ // Returns a 2d projection of a 3d coordinate in space Vertex vertex2d( Vertex d_3 ); }