//=========================================================================== cCamera::cCamera(cWorld* a_parentWorld) { // set default values for clipping planes setClippingPlanes(0.1, 1000.0); // set default field of view angle setFieldViewAngle(45); // set parent world m_parentWorld = a_parentWorld; // position and orient camera, looking down the negative x-axis // (the robotics convention) set( cVector3d(0,0,0), // Local Position of camera. cVector3d(-1,0,0), // Local Look At position cVector3d(0,0,1) // Local Up Vector ); // set default stereo parameters m_stereoFocalLength = 5.0; m_stereoEyeSeparation = 0.5; // disable multipass transparency rendering by default m_useMultipassTransparency = 0; m_performingDisplayReset = 0; memset(m_projectionMatrix,0,sizeof(m_projectionMatrix)); }
//=========================================================================== void cCamera::adjustClippingPlanes() { // check if world is valid cWorld* world = getParentWorld(); if (world == NULL) { return; } // compute size of the world world->computeBoundaryBox(true); // compute a distance slightly larger the world size cVector3d max = world->getBoundaryMax(); cVector3d min = world->getBoundaryMin(); double distance = 2.0 * cDistance(min, max); // update clipping plane: setClippingPlanes(distance / 1000.0, distance); }
//=========================================================================== cCamera::cCamera(cWorld* a_parentWorld) { // set parent world m_parentWorld = a_parentWorld; // set default values for clipping planes setClippingPlanes(0.1, 1000.0); // set default field of view angle setFieldViewAngle(45); // position and orient camera, looking down the negative x-axis // (the robotics convention) set( cVector3d(0,0,0), // Local Position of camera. cVector3d(-1,0,0), // Local Look At position cVector3d(0,0,1) // Local Up Vector ); // by default we use a persepctive camera m_perspectiveMode = true; // width of orthographic view. (not active by default) m_orthographicWidth = 0.0; // set default stereo parameters m_stereoFocalLength = 2.0; m_stereoEyeSeparation = 0.07; // disable multipass transparency rendering by default m_useMultipassTransparency = false; // enable shadow rendering m_useShadowCasting = false; // enable stereo display m_useStereo = false; // reset display status m_resetDisplay = false; // create front and back layers m_frontLayer = new cWorld(); m_backLayer = new cWorld(); }
void Renderer::render(const shared_ptr<Scene>& _scene, bool _withNames, bool _fastDraw){ if(!initDone || _scene->glDirty || (_scene->gl && _scene->gl->dirty)){ init(_scene); _scene->glDirty=false; if(_scene->gl) _scene->gl->dirty=false; } assert(initDone); switch(fast){ case FAST_ALWAYS: fastDraw=true; break; case FAST_UNFOCUSED: fastDraw=_fastDraw; break; case FAST_NEVER: fastDraw=false; break; } // make a copy to see if it were true the whole time bool wasSetRefNow(setRefNow); withNames=_withNames; // used in many methods if(withNames) glNamedObjects.clear(); // acquire shared_ptr to scene { scene=_scene; } // smuggle scene and ourselves into GLViewInfo for use with GlRep and field functors viewInfo.scene=scene.get(); viewInfo.renderer=this; setClippingPlanes(); setLighting(); drawPeriodicCell(); fieldDispatcher.scene=scene.get(); fieldDispatcher.updateScenePtr(); for(auto& f: scene->fields){ fieldDispatcher(f,&viewInfo); } if(engines){ for(const auto& e: scene->engines){ if(!e || e->dead) continue; // !e should not happen, but make sure glScopedName name(viewInfo,e,shared_ptr<Node>()); e->render(viewInfo); } } for(const shared_ptr<GlExtraDrawer>& d: extraDrawers){ if(!d || d->dead) continue; glPushMatrix(); d->scene=scene.get(); d->render(); glPopMatrix(); } // if ref positions were set the whole time, unset here, it is done for all nodes if(setRefNow && wasSetRefNow){ setRefNow=false; } if(withNames) cerr<<"render(withNames==true) done, "<<glNamedObjects.size()<<" objects inserted"<<endl; // release the shared_ptr; must be GIL-protected since descruction of Python-constructed object without GIL causes crash { GilLock lock; scene.reset(); } }