To give you an idea of how the code behind Photorealizer is organized, here's a list of all of the C++ classes that I've written (updated January 25, 2013), with subclasses nested below their superclass. (A few of these things are actually class templates or namespaces with functions in them, but they might as well be classes.)
AdaptiveSampler
AdaptiveSamplerSample
Aperture
    PinholeAperture 
    WideAperture 
AxisAlignedBoundingBox
BasicMath
Bitmap
    LDRBitmap
    HDRBitmap
BitmapTextureMapData
BoundingSphere
BSDF
    CookTorranceBRDF 
    LambertBRDF
    LambertBTDF
    ModifiedPhongBRDF
    OrenNayarBRDF 
    SpecularMicrofacetBSDF  
BSDFSample
BSDFWeight
BVH
BVHNode
Camera
    AngularFisheyeCamera
    LatitudeLongitudeCamera  
    RegularCamera
CameraSample
Color
ColorProfile
    PowerLawColorProfile
    SRGBColorProfile
ColorRamp
ColorTransform
    BlackAndWhiteColorTransform
    BlackLevelColorTransform
    ColorBalanceColorTransform 
    CyanColorTransform
    RedColorTransform  
    RollOffContrastColorTransform 
    SinusoidalContrastColorTransform
CustomOutput
Distribution1D
Distribution1DSample
Distribution2D
Distribution2DSample
FileNameUtils
FinalGatheringPoint
FinalGatheringSample
FinalGatheringSampler
Fresnel
HaltonSequence
ImprovedPerlinNoise
ImprovedPerlinNoiseFunctions
IndexOfRefraction
Interpolator
Intersection
IntersectionExtras
IrradianceSample
KDTree
KDTreeNode
KDTreePoint
Light
    DirectionalLight 
    EnvironmentMap
        CIEOvercastSky
        ColorEnvironmentMap 
        GradientEnvironmentMap
        HDREnvironmentMap
            FisheyeHDREnvironmentMap
            EquirectangularHDREnvironmentMap  
    RectangularAreaLight 
    SphericalLight 
    Sun
LightIntersection
LightPhoton
LightSample
LinearAlgebra
Main
MainWindow
Medium
MersenneTwister
Motion
MultipleScattering
MultipleScatteringOctree
MultipleScatteringOctreeNode
OpenEXRImage
OpenEXRStuff
PathTracer
PhaseFunction
    HenyeyGreensteinPhaseFunction
    IsotropicPhaseFunction 
Photon
    IrradiancePhoton
PNGWriter
PointMaterial
    Material
Rasterizer
Ray
    AxisAlignedBoundingBoxRay
ReconstructionFilter
    BoxFilter
    GaussianFilter
    TriangleFilter 
ReflectionRefraction
RenderDispatcher 
SceneObject
    Primitive
        AnyPolygon
        Cube
        Cylinder
        HeightField 
        InfiniteGroundPlane  
        Metaballs
        Sphere
    TransformableSceneObject
        SceneObjectContainer
            Model
            Pedestal
            Scene
                HardCodedScene
SellmeierCoefficients
Settings
    HardCodedSettings
Shutter
    InstantaneousShutter
SpatialGridHashTable
    SimpleIntersection
SpatialGridHashTablePoint
SpecularMicrofacetDistribution
    BeckmanDistribution
    GGXDistribution
Stopwatch
StringUtils
Test
TextureMap
    TextureMap2D
        BitmapTextureMap 
        CheckeredTexture
     TextureMap3D
        MarbleTexture 
        WoodTexture
Triangulator
Vertex
    VertexWithNormal
    VertexWithNormalAndUV
    VertexWithUV
Volumetric
VolumetricIntersection
Voxel
VoxelBuffer
I wrote all of that code (and designed the architecture) from scratch, except for the following minor pieces: a function for efficient ray–box intersection (I had previously written my own, but it wasn't as efficient), improved Perlin noise (I converted the Java code to C++; I've implemented Perlin noise before, but not the improved version), a few of the functions in my custom linear algebra
 library (I previously used a basic linear algebra library found here), a basic UI based on this Qt image viewer example.
In addition to the classes listed above, I also utilize three libraries for loading and saving bitmap images (OpenEXR, stb_image, and libpng), as well as Qt for the GUI (used to use Cocoa on Mac), OpenMP for multithreading (used to use Grand Central Dispatch on Mac), and of course C++ (including some new TR1 and C++11 features).
I try to write code that is clean, descriptive, and readable. Here are a couple relevant quotes that I like: 
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." ~Martin Fowler
"One of the miseries of life is that everybody names things a little bit wrong, and so it makes everything a little harder to understand in the world than it would be if it were named differently." ~Richard Feynman
No comments:
Post a Comment