Overview
Lightsprint Core calculates global illumination in dynamic and static scenes. Subsystems include fast ray-scene intersections. It is OpenGL/Direct3D independent.
API
Namespace: rr
Header: Lightsprint/RRSolver.h
- calculates global illumination in static or dynamic scenes, offline or realtime
- gives you full control over speed/quality
- calculated illumination is available in vertex buffers, lightmaps and environment maps
- communicates completely in custom units, e.g. screen colors
- purely CPU, extensions for realtime rendering on GPU implemented in rr_gl::RRSolverGL
Samples RealtimeLights and RealtimeRadiosity show the result of integration, interactive Collada scene viewer with global illumination immediately responding to free movement of objects and lights.
Headers: Lightsprint/RRScene.h
- data structure (RRScene): 3d scene loaded from disk (objects, lights)
Headers: Lightsprint/RRIllumination.h
Header: Lightsprint/RRBuffer.h
- data structure (RRBuffer): texture, cube map, vertex buffer
Header: Lightsprint/RRObject.h
- 3d object properties: geometry, materials, position etc
Header: Lightsprint/RRCollider.h
- finds ray-mesh intersections
- thread safe, you can calculate any number of intersections at the same time
- you can select technique in range from maximal speed to zero memory allocated
- up to 2^32 vertices and 2^30 triangles in mesh
- builds helper-structures and stores them in cache on disk
Sample HelloCollider shows the most simple usage scenario:
- Create RRMesh using your vertex/index buffers.
- Create RRCollider using your mesh.
- Create RRRay using your ray.
- Call RRCollider::intersect() to find intersections. Repeat for all rays.
Sample BunnyBenchmark shows how to detect collisions on all available CPUs/cores at once.
Header: Lightsprint/RRMesh.h
- interface to 3d triangle mesh
- tristrips, trilists, indexed or not (RRMesh::create, RRMesh::createIndexed)
- positions, normals, tangents, bitangents, texcoords
- can optimize:
- merges many small meshes into one big mesh without additional memory (RRMesh::createMultiMesh)
- allows for procedural meshes, requires no memory (implementing your RRMesh takes few minutes)
- up to 2^32-2 vertices and 2^32-2 triangles in mesh
- thread safe, you can use mesh in any number of threads at the same time
Sample HelloMesh shows the most simple usage scenario, mesh is created out of existing array of vertices.
Header: Lightsprint/RRMath.h
- math classes used by whole Lightsprint SDK
- RRReal holds one real number, which is single precision float
- RRVec2 is vector of 2 real numbers
- RRVec3 is vector of 3 real numbers
- RRVec4 is vector of 4 real numbers
Header: Lightsprint/RRDebug.h
- debugging and reporting routines used by whole Lightsprint SDK
- RRReporter processess all messages sent by Lightsprint SDK to you
Header: Lightsprint/RRLight.h
- RRLight interface for point/spot/dir lights
Header: Lightsprint/RRVector.h
- RRVector template, std::vector like container