milton.h
Go to the documentation of this file.00001 /**<!--------------------------------------------------------------------> 00002 @file milton.h 00003 @author Travis Fischer (fisch0920@gmail.com) 00004 @author Matthew Jacobs (jacobs.mh@gmail.com) 00005 @date Fall 2008 00006 00007 @brief 00008 Convenience header which includes all public headers used throughout 00009 the Milton library 00010 <!-------------------------------------------------------------------->**/ 00011 00012 #ifndef LIB_MILTON_H_ 00013 #define LIB_MILTON_H_ 00014 00015 // include all main milton headers, most of which include their own subheaders 00016 #include <accel/accel.h> 00017 #include <cameras/cameras.h> 00018 #include <common/common.h> 00019 #include <common/image/image.h> 00020 #include <core/core.h> 00021 #include <dynamic/dynamic.h> 00022 #include <filters/filters.h> 00023 #include <loaders/loaders.h> 00024 #include <materials/materials.h> 00025 #include <renderers/renderers.h> 00026 #include <shapes/shapes.h> 00027 #include <stats/stats.h> 00028 #include <third-party/third-party.h> 00029 #include <utils/utils.h> 00030 00031 // below is the intro page for the Doxygen-generated documentation 00032 00033 /** 00034 * @mainpage Milton Documentation 00035 * 00036 * @section intro Introduction 00037 * @htmlonly 00038 * <p class="indent"> 00039 * @endhtmlonly 00040 * Milton is open-source and aims to maintain a polished, well-documented code base. Documentation for the source itself is available via <a href="/docs/doxygen/classes.php">Doxygen generated documentation</a>. Thorough documentation is also available for the Milton <a href="/docs/scenefile/index.php">scenefile format</a> (which is probably a good place to start getting a high-level overview of how Milton is structured, especially if you're not interested in the source itself). In addition to the thorough API docs, we also provide a collection of introductory tutorials which walkthrough %core Milton concepts in an attempt to familiarize the user with a high-level overview of an otherwise large and foreboding codebase. 00041 * </p> 00042 * <br /> 00043 * <br /> 00044 * 00045 * @section tutorials Milton Tutorials 00046 * <p> 00047 * <ul> 00048 * <li><a href="/docs/scenefile/index.php">Scenefile documentation and tutorials</a></li> 00049 * <li><a href="/tutorials/pathtracer.php">Path tracing example tutorial</a></li> 00050 * </ul> 00051 * </p> 00052 * <br /> 00053 * 00054 * @section overview Source Layout 00055 * <div class="projDir" id="projDir1"><div>Core Milton directory structure</div></div> 00056 * 00057 * @htmlonly 00058 * <p class="indent"> 00059 * @endhtmlonly 00060 * Milton is logically broken up into several distinct components. The <a href="/docs/doxygen/dirs.php">Doxygen generated documentation</a> does a pretty good job at allowing you to traverse the source in the way it was meant to be traversed. In addition, we provide here an overview of the source layout. 00061 * </p> 00062 * @htmlonly 00063 * <p class="indent"> 00064 * @endhtmlonly 00065 * At the top-level, there is <span class="docStyled">exec</span>, <span class="docStyled">gui</span>, <span class="docStyled">milton</span>, and <span class="docStyled">tests</span>, each with its own target (executable, library, etc.). Here's a descriptive breakdown of each directory and its purpose: 00066 * <ul> 00067 * <li><span style="color: #FF8D00; font-weight: bold;">milton</span> contains all of the %core framework and is probably where you'll want to start getting familiar with the code. <span class="docStyled">milton</span>'s purpose is to build the %core <span class="docStyled">libmilton</span> library which external programs can link against. Note, for the purposes of compiling external programs against <span class="docStyled">milton</span>, you must have the top-level <span class="docStyled">milton</span> directory in your path (with g++, you'd need to invoke something like <span class="docStyled">g++ -Ipathtomilton -o myprogram main.cpp</span>). All #includes within <span class="docStyled">milton</span> are relative to the top-level directory for convenience. Also note the all-encompassing convenience header <span class="docStyled">milton/milton.h</span>, which indirectly #includes all public <span class="docStyled">milton</span> headers throughout the main <span class="docStyled">milton</span> library. This header is provided such that you only have to #include one file in order to use the <span class="docStyled">milton</span> library, without having to worry about #including all of the different files you have to use for a particular application.</li> 00068 * <li><span style="color: #FF8D00; font-weight: bold;">gui</span> contains everything you'd need to get a quick graphical application built atop the %core <span class="docStyled">milton</span> library up-and-running. Specifically, it contains a multithreaded, OpenGL-capable <a href="http://doc.trolltech.com/4.3/">Qt</a>-based frontend. <span class="docStyled">gui</span> provides a hopefully easy-to-use wrapper, MiltonApp, which should be the only Gui interface that most Milton applications will need to use. <span class="docStyled">gui</span> compiles another library, <span class="docStyled">libgui</span>, which external applications may link against. Note that MiltonApp doesn't have to be graphical; it naturally supports a <span class="docStyled">nox</span> (aka non-graphical or no X-server) mode as well for rendering in batch or remotely over a network (where the execution environment might not be graphics-friendly). See MiltonApp or one of the applications in <span class="docStyled">exec</span> or <span class="docStyled">tests</span> which use MiltonApp for more details.</li> 00069 * <li><span style="color: #FF8D00; font-weight: bold;">exec</span> contains the main executable that's packaged with Milton that'll work out-of-the box on supported platforms. <span class="docStyled">exec</span> compiles to an executable named <span class="docStyled">milton</span>; run <span class="docStyled">milton --help</span> from within <span class="docStyled">exec</span> for more details on how to invoke <span class="docStyled">milton</span>. <span class="docStyled">exec</span> also contains a plethora of built-in resources for <a href="/tutorials/scenefiles.php">scenefiles</a>, including testing scenefiles that we've used during the development of Milton, as well as a small repository of various textures and meshes. Note that <span class="docStyled">exec/main.cpp</span> uses MiltonApp to parse commandline parameters and get a default Gui up-and-running. Also note that the Makefile in <span class="docStyled">exec</span> links against <span class="docStyled">libgui</span> and <span class="docStyled">libmilton</span>.</li> 00070 * <li><span style="color: #FF8D00; font-weight: bold;">tests</span> contains a hodgepodge of tests aimed at ensuring the stability and accuracy of the %core <span class="docStyled">milton</span> library. Note that <span class="docStyled">tests</span> also contains several fun, educational "applets" which specialize the notion of a Visualization to use Milton more as a framework and less as a standalone program. Examples include an OpenGL visualizer for the distributions of various built-in BSDFs and a visualizer for paths generated with the built-in BidirectionalPathTracer. Note that many of these test cases utilize MiltonApp (and thus both <span class="docStyled">libgui</span> and <span class="docStyled">libmilton</span>) as their main interface to Milton.</li> 00071 * </ul> 00072 * </p> 00073 * 00074 * <p> 00075 * Within the %core <span class="docStyled">milton</span> directory, the framework is broken down logically into subdirectories, <span class="docStyled">accel</span>, <span class="docStyled">cameras</span>, <span class="docStyled">common</span>, etc, some of which contain their own subdirectories (ex, <span class="docStyled">common/math/simd</span>). Milton uses several third-party libraries (located in <span class="docStyled">milton/third-party</span>), namely: 00076 * </p> 00077 * <table> 00078 * <tr><td><a href="http://doc.trolltech.com/4.3/">Qt</a></td><td>a cross-platform Gui and generic toolkit framework</td></tr> 00079 * <tr><td><a href="http://www.boost.org/">boost</a></td><td>a set of advanced, portable C++ libraries (Milton makes heavy use of <a href="http://www.boost.org/doc/libs/1_37_0/doc/html/any.html">boost::any</a> in particular)</td></tr> 00080 * <tr><td><a href="http://blog.beef.de/projects/tinyjson/">tinyjson*</a></td><td>a minimalistic JSON parser based on boost.spirit</td></tr> 00081 * <tr><td><a href="http://www.cs.kuleuven.ac.be/~ares/libobj">libobj*</a></td><td>a modern C++ library for parsing the Wavefront OBJ file format (by <a href="http://www.cs.kuleuven.ac.be/~ares/">Ares Lagae</a>)</td></tr> 00082 * <tr><td><a href="http://www.cs.kuleuven.ac.be/~ares/libply">libobj*</a></td><td>a modern C++ library for parsing the PLY file format (by <a href="http://www.cs.kuleuven.ac.be/~ares/">Ares Lagae</a>)</td></tr> 00083 * </table> 00084 * <p> 00085 * Note: libraries denotd with a * are included in the standard Milton subversion (svn) repository. Qt and boost are not included due to their size. 00086 * </p> 00087 * @endhtmlonly 00088 */ 00089 00090 #endif // LIB_MILTON_H_ 00091
Generated on 28 Feb 2009 for Milton by
1.5.6