VP中单品展示时观察者的设置

观察者的设计,需要保证任意角度、任意位置能清晰看清物体。

设计思路: 1   坐标原点上放置一个物体,设置一个DOF为Observer。

                   2   场景中放置一个物体hummer,其他默认创建即可。

                   3   观察者的配置:

                          pObserver_myObserver->addChannel( pChannel );
                          pObserver_myObserver->addAttachment( pEnv );
                          pObserver_myObserver->setScene( pScene );
                          pObserver_myObserver->setLookFrom(pObject_hummer );

                    4    配置观察者:

                           pDofObserve为场景中心的DOF,把pObjectObserver设置为pDofObserve的孩子。

                           这样,观察者的位置XYZ值就可以通过pObjectObserver来设置实现;

                                     观察者的姿态HPR值就可以通过pDofObserve来设置实现。

                          //设置观察者
                            pObjectObserver=vpObject::find("hummer");
                            pObjectObserver->ref();

                            pObjectDesktop=vpObject::find("desktop");
                            pObjectDesktop->ref();

                           //场景中心,观察者旋转点
                           pDofObserver=static_cast(pObjectDesktop->find_named("Observer"));
                           pDofObserver->ref();
                           pDofObserver->push_back_child(pObjectObserver);

                           //设置观察者的最初状态,参考右手定则。观察者位于Y轴负轴上,俯视Y轴正轴

                           pObjectObserver->setTranslate(0.0, -1.50 ,0.2,false);
                           pDofObserver->setRotate(-20.0,-25.0,0.0,false);
                           pChannel->setFOVSymmetric( 38 ,  -1.000000f );

            5    旋转到不同位置的设置

                        单品物体放置于坐标原点,并不进行任何的移动操作。

                        本质是通过操作观察者来实现位置变化和姿态旋转。

                        观察者位于前后左右四个位置时,会产生不同的观察效果。

                        这里主要是通过环境对象pEnv来改变经纬度和时间,实现光照效果的切换,

                        从而在四个面都能准确清晰的看清物体。

                        

      case vpWindow::KEY_LEFT:  
		pDofObserver->setRotateH(-1,true);

		//修改纬度
		R=static_cast(abs(pDofObserver->getRotateH())) % 360 ;
		if ( R<=135 || R>=225 )
			pEnv->setReferencePosition(0, 70); 
		else
			pEnv->setReferencePosition(0,-40);

		//修改时间
		R=static_cast(pDofObserver->getRotateH()) % 360 ;
		if  ( (R>=45 && R<=135) || (R<=-225 && R>=-315) )
			pEnv->setTimeOfDay(9); 
		else
			pEnv->setTimeOfDay(14);

		break;

                   效果:

                         正面:

                              VP中单品展示时观察者的设置_第1张图片

右面:

      VP中单品展示时观察者的设置_第2张图片

后面:

       VP中单品展示时观察者的设置_第3张图片

左面:

      VP中单品展示时观察者的设置_第4张图片

         整体效果还不错,解决了不同角度观察物体的问题。里面的时间和纬度还可以仔细调节,效果会更好。

你可能感兴趣的:(Vega,Prime)