本文主要是介绍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<vsDOF *>(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<int>(abs(pDofObserver->getRotateH())) % 360 ;if ( R<=135 || R>=225 )pEnv->setReferencePosition(0, 70); elsepEnv->setReferencePosition(0,-40);//修改时间R=static_cast<int>(pDofObserver->getRotateH()) % 360 ;if ( (R>=45 && R<=135) || (R<=-225 && R>=-315) )pEnv->setTimeOfDay(9); elsepEnv->setTimeOfDay(14);break;
效果:
正面:
右面:
后面:
左面:
整体效果还不错,解决了不同角度观察物体的问题。里面的时间和纬度还可以仔细调节,效果会更好。
这篇关于VP中单品展示时观察者的设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!