diff --git a/library/PolyVoxCore/include/PolyVoxCore/DefaultMarchingCubesController.h b/library/PolyVoxCore/include/PolyVoxCore/DefaultMarchingCubesController.h index 2ab7abcc..6dc7411c 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/DefaultMarchingCubesController.h +++ b/library/PolyVoxCore/include/PolyVoxCore/DefaultMarchingCubesController.h @@ -28,6 +28,34 @@ freely, subject to the following restrictions: namespace PolyVox { + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// This class provides a default implementation of a controller for the MarchingCubesSurfaceExtractor. It controls the behaviour of the + /// MarchingCubesSurfaceExtractor and provides the required properties from the underlying voxel type. + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// PolyVox does not enforce any requirements regarding what data must be present in a voxel, and instead allows any primitive or user-defined + /// type to be used. However, the Marching Cubes algorithm does have some requirents about the underlying data in that conceptually it operates + /// on a density field. In addition, the PolyVox implementation of the Marching Cubes algorithm also understands the idea of each voxel + /// having a material which is copied into the vertex data. + /// + /// Because we want the MarchingCubesSurfaceExtractor to work on any voxel type, we use a Marching Cubes controller (passed as + /// a parameter of the MarchingCubesSurfaceExtractor) to expose the required properties. This parameter defaults to the DefaultMarchingCubesController. + /// The main implementation of this class is designed to work with primitives data types, and the class is also specialised for the Material, + /// Density and MaterialdensityPair classes. + /// + /// If you create a custom class for your voxel data then you probably want to include a specialisation of DefaultMarchingCubesController, + /// though you don't have to if you don't want to use the Marching Cubes algorithm or if you prefer to define a seperate Marching Cubes controller + /// and pass it as an explicit parameter (rather than relying on the default). + /// + /// For primitive types, the DefaultMarchingCubesController considers the value of the voxel to represent it's density and just returns a constant + /// for the material. So you can, for example, run the MarchingCubesSurfaceExtractor on a volume of floats or ints. + /// + /// It is possible to customise the behaviour of the controller by providing a threshold value through the constructor. The extracted surface + /// will pass through the density value specified by the threshold, and so you should make sure that the threshold value you choose is between + /// the minimum and maximum values found in your volume data. By default it is in the middle of the representable range of the underlying type. + /// + /// \sa MarchingCubesSurfaceExtractor + /// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template class DefaultMarchingCubesController { diff --git a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h index 3d35b1b4..7d05a391 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h +++ b/library/PolyVoxCore/include/PolyVoxCore/LargeVolume.h @@ -42,7 +42,7 @@ freely, subject to the following restrictions: namespace PolyVox { - ///The LargeVolume class provides a memory efficient method of storing voxel data while also allowing fast access and modification. + /// The LargeVolume class provides a memory efficient method of storing voxel data while also allowing fast access and modification. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// A LargeVolume is essentially a 3D array in which each element (or voxel) is identified by a three dimensional (x,y,z) coordinate. /// We use the LargeVolume class to store our data in an efficient way, and it is the input to many of the algorithms (such as the surface