The render process consists of evaluating the main scene's pigment (normally a camera) in the (0,0)-(1,1) range. You can also change the main scene's pigment to not be a plain camera but some mapped pigment, e.g. two cameras in a checker pattern.
Recusive camera example:
Pigment3D* setUpScene_RecCamera() {
Scene* s = new Scene();
CameraPerspective* c = new CameraPerspective(s);
Object3D* sp = new Box(Vector3(0),Vector3(1,1,0.01));
sp->scale(Vector3(2));
sp->rotate(Vector3(-1,-35,0));
sp->translate(Vector3(-2,0,4));
sp->setPigment(*c);
sp->setFinish(Finish(1,0,0,0,0));
s->addObject(sp);
Pigment3DMapped check = Pigment3DMapped(new Checker());
check.insertCol(0,Colour3(1,0,0));
check.insertCol(1,Colour3(0,0,1));
sp = new Box(Vector3(-.1,-.1,.01),Vector3(1.1,1.1,0.2));
sp->scale(Vector3(2));
sp->setPigment(Pigment3DConstant(Colour5(0,1,0,0,0)));
sp->rotate(Vector3(-1,-35,0));
sp->translate(Vector3(-2,0,4));
s->addObject(sp);
sp = new Plane(Vector3(0,1,0));
sp->translate(Vector3(0,-2,0));
sp->setPigment(check);
s->addObject(sp);
sp = new Plane(Vector3(0,0,1));
sp->translate(Vector3(0,0,10));
sp->setPigment(Pigment3DConstant(Colour3(1)));
s->addObject(sp);
PointLight* l = new PointLight(Vector3(0,0,0),Colour3(1),s);
s->addLight(l);
Material3D m = Material3D(new Texture3D(new Pigment3DConstant(Colour5(0)), new Finish(0.1,0.6,0,0,0)), new Interior() );
s->setDefaultMaterial(m);
return c;
}
Blending between two different cameras:
Pigment3D* setUpScene_BlendCamera() {
Pigment3D* s1 = setUpScene_Isosurface();
Pigment3D* s2 = setUpScene_Menger();
Pigment3DMapped* imap = new Pigment3DMapped(new Gradient(Vector3(1,0,0)));
imap->insert(0,s1);
imap->insert(1,s2);
return imap;
}