Example #1
0
//===========================================================================
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));
}
Example #2
0
//===========================================================================
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();
}
Example #4
0
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(); }


}