Beispiel #1
0
void ViewData::notifyChanged()
{
    ::seq::ViewData::setOrtho( ViewData::getOrtho( ));
    _view.changeMode( getStereo() ? eq::View::MODE_STEREO
                                  : eq::View::MODE_MONO );

    const auto& observer = _view.getObserver();
    if( !observer )
        return;
    observer->setEyePosition( eq::EYE_LEFT, seq::Vector3f( -getEyeSeparation()/2.f, 0.f , 0 ));
    observer->setEyePosition( eq::EYE_RIGHT, seq::Vector3f( getEyeSeparation()/2.f, 0.f , 0 ));
}
Beispiel #2
0
// LOOKAT
const Camera::LookAtValueType Camera::getLookAt( const EyeUsagePolicyValueType eyeUsagePolicy ) const
{
	vgm::MatrixR matrix;

	// MONOSCOPIC
	if ( getMode() == MONOSCOPIC )
	{
		switch ( eyeUsagePolicy.value() )
		{
			case EYE_LEFT:
				matrix = getLookAtLeft();
				break;

			case EYE_RIGHT:
				matrix = getLookAtRight();
				break;

			case EYE_BOTH:
			{
				const Camera::LookAtValueType left	= getLookAtLeft();
				const Camera::LookAtValueType right	= getLookAtRight();

				vgAssertN( left.equals(right), "lookAtLeft != lookAtRight" );
				matrix = left;
				break;
			}

			//case DEFAULT_EYEUSAGEPOLICY: = EYE_BOTH
			default:
				vgAssertN( false, "Unexpected value for eye usage policy %i", eyeUsagePolicy.value() );
				matrix.setIdentity();
		}
	}
	else
	// STEREOSCOPIC
	{
		const vgm::Vec3f halfEyeSeparation( getEyeSeparation() / 2.f, 0.f, 0.f );

		switch ( eyeUsagePolicy.value() )
		{
			case EYE_LEFT:
			{
				vgm::MatrixR eyeSeparation;
				eyeSeparation.setTranslate( halfEyeSeparation );
				matrix = getLookAtLeft();
				matrix = matrix * eyeSeparation;
				break;
			}

			case EYE_RIGHT:
			{
				vgm::MatrixR eyeSeparation;
				eyeSeparation.setTranslate( -halfEyeSeparation );
				matrix = getLookAtRight();
				matrix = matrix * eyeSeparation;
				break;
			}

			case EYE_BOTH:
			{
				vgAssertN( false, "EYE_BOTH not allowed in non MONOSCOPIC mode" );
				break;
			}

			//case DEFAULT_EYEUSAGEPOLICY: = EYE_BOTH
			default:
				vgAssertN( false, "Unexpected value for eye usage policy %i", eyeUsagePolicy.value() );
				matrix.setIdentity();
		}
	}

	return matrix;
}