TEST(OsgViewElementRenderTest, StereoView)
{
	std::shared_ptr<Runtime> runtime = std::make_shared<Runtime>();
	std::shared_ptr<OsgManager> manager = std::make_shared<OsgManager>();

	runtime->addManager(manager);
	runtime->addManager(std::make_shared<SurgSim::Framework::BehaviorManager>());

	std::shared_ptr<Scene> scene = runtime->getScene();

	/// Add a graphics component to the scene
	std::shared_ptr<OsgViewElement> viewElement = std::make_shared<OsgViewElement>("view");

	auto boxElement = std::make_shared<SurgSim::Framework::BasicSceneElement>("box");

	RigidTransform3d pose =
		makeRigidTransform(Vector3d(1.0, 1.0, 1.0), Vector3d(0.0, 0.0, 0.0), Vector3d(0.0, 1.0, 0.0));
	viewElement->setPose(pose);
	scene->addSceneElement(viewElement);

	auto box = std::make_shared<OsgBoxRepresentation>("box");
	box->setSizeXYZ(0.1, 0.1, 0.2);
	boxElement->addComponent(box);

	RigidTransform3d from =
		makeRigidTransform(Vector3d(0.2, 0.0, 0.0), Vector3d(0.0, 0.0, 0.0), Vector3d(0.0, 1.0, 0.0));
	RigidTransform3d to =
		makeRigidTransform(Vector3d(-0.2, 0.0, 0.0), Vector3d(0.0, 0.0, 0.0), Vector3d(0.0, 1.0, 0.0));
	auto interpolator = std::make_shared<SurgSim::Blocks::PoseInterpolator>("interpolator");

	interpolator->setDuration(2.0);
	interpolator->setStartingPose(from);
	interpolator->setEndingPose(to);
	interpolator->setPingPong(true);
	interpolator->setTarget(boxElement);

	boxElement->addComponent(interpolator);

	scene->addSceneElement(boxElement);

	auto osgView = std::static_pointer_cast<OsgView>(viewElement->getView());
	osgView->setStereoMode(View::STEREO_MODE_HORIZONTAL_SPLIT);
	osgView->setDisplayType(View::DISPLAY_TYPE_MONITOR);
	osgView->setEyeSeparation(0.06);
	osgView->setScreenWidth(0.486918);
	osgView->setScreenHeight(0.273812);
	osgView->setScreenDistance(1.0);


	runtime->start();
	boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
	runtime->stop();
}
示例#2
0
文件: Camera.cpp 项目: npapier/vgsdk
void Camera::setToDefaults( void )
{
	GeometricalTransformation::setToDefaults();
	ProjectionTransformation::setToDefaults();
	setProjectionLeft( vgm::MatrixR(vgm::MatrixR::getIdentity()) );
	setLookAtLeft( vgm::MatrixR(vgm::MatrixR::getIdentity()) );
	setProjectionRight( vgm::MatrixR(vgm::MatrixR::getIdentity()) );
	setLookAtRight( vgm::MatrixR(vgm::MatrixR::getIdentity()) );
	setViewport( vgm::Rectangle2i(0, 0, 1600, 1200) );
	setFovy( (45.f) );
	setMode( (MONOSCOPIC) );
	setEyeSeparation( (0.f) );
	setImageShift( (0.f) );
	setRightEye( (true) );
}
示例#3
0
ViewData::ViewData( seq::View& view, Model* model )
    : Super( view )
    , _initialModelMatrix( model->getModelMatrix( ))
    , _model( model )
    , _view( view )
{
    view.setModelUnit( EQ_MM * 10.f );
    setModelMatrix( _initialModelMatrix );

    const auto& observer = _view.getObserver();
    if( !observer )
        return;
    const auto& leftEye = observer->getEyePosition( eq::EYE_LEFT );
    const auto& rightEye = observer->getEyePosition( eq::EYE_RIGHT );
    setEyeSeparation( rightEye.x() - leftEye.x( ));
}
示例#4
0
OculusView::OculusView(const std::string& name) : OsgView(name)
{
	SURGSIM_ADD_SERIALIZABLE_PROPERTY(OculusView, std::shared_ptr<SurgSim::Framework::Component>, InputComponent,
									  getInputComponent, setInputComponent);

	// Default Settings of Oculus DK2
	setFullScreen(true);
	setDisplayType(View::DISPLAY_TYPE_HMD);
	setStereoMode(View::STEREO_MODE_HORIZONTAL_SPLIT);
	setScreenWidth(0.0631);
	setScreenHeight(0.071);
	setEyeSeparation(0.06);
	setScreenDistance(0.10);
	setTargetScreen(1); // Assume Oculus HMD has ID '1'.

	std::array<int, 2> dimensions = {1920, 1080};
	setDimensions(dimensions);
}