コード例 #1
0
ファイル: Vehicle.cpp プロジェクト: HOUWEI/VirtualCity
osg::ref_ptr<osg::AnimationPath> CVehicle::outputScene(const osg::ref_ptr<osg::Vec3Array>& junctionArray , double width, unsigned int num)
{
	osg::ref_ptr<osg::Vec3Array> driveway = new osg::Vec3Array;
	for (int i = 0; i != m_index.size(); i++ )
	{
		driveway->push_back((*junctionArray)[m_index[i]]);
	}

	m_loc = rand() % num ;
	double w = width / 2.0 + width * m_loc;
	generatePath(driveway,w);


	
	typedef osg::AnimationPath::ControlPoint ControlPoint;
	osg::Vec3 yoz(1.0, 0.0, 0.0), xoz(0.0, 1.0, 0.0), xoy(0.0, 0.0, 1.0);
	osg::ref_ptr<osg::AnimationPath> path = new osg::AnimationPath;




	double m = 0;

	for (int i = 0; i != m_index.size(); i++ )
	{
		if( i == 0)
		{
			path->insert( 0,
				ControlPoint((*driveway)[i],osg::Quat( 0.0,yoz,0.0,xoz, 0.0,xoy)) );
			
		}

		else
		{
			m += m_angleList[i-1];
				
			path->insert( (i-1) * m_speed + 0.1,
				ControlPoint((*driveway)[i-1],osg::Quat( 0.0,yoz,0.0,xoz,m,xoy)) );
			path->insert( i * m_speed , 
				ControlPoint((*driveway)[i],osg::Quat( 0.0,yoz,0.0,xoz,m,xoy)) );
		
		}

	}

	return path.release();

}
コード例 #2
0
ファイル: path.cpp プロジェクト: seafengl/osgenginebook
osg::AnimationPath* createPath()
{
    typedef osg::AnimationPath::ControlPoint ControlPoint;
    osg::Vec3 yoz(1.0, 0.0, 0.0), xoz(0.0, 1.0, 0.0), xoy(0.0, 0.0, 1.0);
    osg::ref_ptr<osg::AnimationPath> path = new osg::AnimationPath;
    
    path->insert( 0.0,
        ControlPoint(osg::Vec3(0.0,0.0,0.0), osg::Quat(    0.0,yoz,0.0,xoz,    0.0,xoy)) );
    path->insert( 2.0,
        ControlPoint(osg::Vec3(5.0,0.0,0.0), osg::Quat(osg::PI,yoz,0.0,xoz,    0.0,xoy)) );
    path->insert( 4.0,
        ControlPoint(osg::Vec3(5.0,0.0,5.0), osg::Quat(osg::PI,yoz,0.0,xoz,osg::PI,xoy)) );
    path->insert( 6.0,
        ControlPoint(osg::Vec3(0.0,0.0,5.0), osg::Quat(    0.0,yoz,0.0,xoz,osg::PI,xoy)) );
    path->insert( 8.0,
        ControlPoint(osg::Vec3(0.0,0.0,0.0), osg::Quat(    0.0,yoz,0.0,xoz,    0.0,xoy)) );
    return path.release();
}