455 pics

show me the money

  while working on my phd in computer graphics, I have developed a suite of new algorithms and techniques to accelerate the process of solid modelling. modelapp is a research testbed that implements these algorithms, which you might find amusing. it is a 300k windows executable that requires an opengl-compatible video card to run. you may also download the source code (written using Microsoft Visual C++ 6.0) if you are so inclined.

smoke and mirrors

  constructive solid geometry is a solid modelling technique in which complex objects are built up from many simple 'primitive' objects using boolean operations such as addition, subtraction and intersection. these primitive objects are defined by implicit functions in space, f(x, y, z) = 0. typical primitives include spheres, planes, cylinders, cones and other geometric shapes; however any shape may be represented as a primitive object in modelapp provided that it can be ray-traced.

  one of the major problems with csg as a modelling technique is that the intersection of two general implicit surfaces is not usually explicitly computable in any reasonable amount of time. this means that actually displaying the objects for rendering is a slow process - typically csg objects are displayed by a ray tracer such as mirage. this is far too slow for interactive modelling.

  modelapp tesselates primitive objects into polygons, and then combines these polygonal representations to form an approximation to the final object which may be displayed at interactive rates using 3D polygon display hardware. the aim is to provide 5-10 updates per second to a designer requiring feedback on changes to their model.

  for a slightly longer description of the theory, see my siggraph technical sketch. a full explanation can be found in draft form on my list of publications.

shake well before use

  to run ModelApp, double-click the executable and wait a few seconds for the application to initialise and fill its data structures. the main application window will appear; it is divided into three sections. feel free to resize the sections by moving the divider bars around.

  modelapp requires an opengl accelerator in order to perform well. it was developed on a pentium ii-450 with a riva tnt card, and should performs well on all of today's 3d accelerators. however, it requires a fast cpu for the csg calculations - below 500 mhz you may not get a satisfactory frame rate.

  the left pane shows the object being modelled. hold down the shift key and drag the mouse to rotate the view - shift+left mouse rotates, shift+right mouse translates and the mousewheel zooms in and out. click on any part of the object to select it; click multiple times on the same part to select further up the csg tree. if the selected object is partially cut away then the hidden parts of the object will appear in a transparent colour and have their profile edges highlighted.

  in the right-hand pane is the csg tree of the object. each node represents a component in the csg graph of the object. click on a node to select that component of the object.

  the bottom right pane shows the transformations that are applied to the selected node. click on the name of a transformation to create a manipulation device in the 3d view. you can change the transformation by clicking on the 'hot spots' of the device and dragging them to a new position.

goldberg would be proud

  from left to right, the toolbar is divided into file operations, display toggles, graph-editing buttons and transformation buttons.

  the piston is the only example object available, as file operations are disabled. the display toggles control background colour, wireframe mode, gouraud shading, profile-edge highlighting and ghosting. 'ghosts' are the transparent shells drawn for selected objects that have been subtracted away.

  the graph-editing controls consist of a delete button, three object-mode buttons (union, subtraction and intersection) and a menu of primitives. to add a component to the CSG graph, first select the component that you wish to modify. then click the object mode you want, and finally select a primitive from the menu. the scene will change to reflect your alteration. instead of adding new primitives, you can also select another node in the csg graph to make a copy of.

  finally, the transformation buttons add a new transformation to the currently selected object. from left to right, they are translation, rotation and scaling. to re-order the transformations attached to an object, click and drag them up and down in the transformation-list pane.

caveat emptor

  modelapp is a little hard to get to grips with. it's a technical demonstration of some principles, not a polished editor. still, it can be fun to play with. if you have any questions, feel free to ask me.

updated 02.21.18
© chris butcher 2000-2003