Ejemplo n.º 1
0
 //--------------------------------------------------------------------------
 VertexPoseKeyFrame* VertexAnimationTrack::createVertexPoseKeyFrame(Real timePos)
 {
     if (mAnimationType != VAT_POSE)
     {
         OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS,
             "Pose keyframes can only be created on vertex tracks of type pose.",
             "VertexAnimationTrack::createVertexPoseKeyFrame");
     }
     return static_cast<VertexPoseKeyFrame*>(createKeyFrame(timePos));
 }
Ejemplo n.º 2
0
//----------------------------------------------------------------------------//
KeyFrame* Affector::createKeyFrame(float position, const String& value,
                                   KeyFrame::Progression progression, const String& sourceProperty)
{
    KeyFrame* ret = createKeyFrame(position);
    ret->setValue(value);
    ret->setProgression(progression);
    ret->setSourceProperty(sourceProperty);

    return ret;
}
Ejemplo n.º 3
0
vector<Mesh*> ModelLoaderOBJ::loadKeyFrame(const FileName &fileName) const {
	FileText::LINES rawLines = FileText::readLines(fileName);
	
	const LINES lines = getLines(rawLines);
	
	const LINES nc = stripComments(lines);
	
	const vector<vec3> verticesArray  = read<vec3>(nc,"v", parseVertex);
	const vector<vec3> normalsArray   = read<vec3>(nc,"vn",parseVertex);
	const vector<vec2> texcoordsArray = read<vec2>(nc,"vt",parseTexCoord);
	const vector<Face> facesArray     = read<Face>(nc,"f", parseFace);
	
	return createKeyFrame(new Mesh(verticesArray,
	                               normalsArray,
	                               texcoordsArray,
	                               facesArray));
}
Ejemplo n.º 4
0
 //--------------------------------------------------------------------------
 TransformKeyFrame* NodeAnimationTrack::createNodeKeyFrame(Real timePos)
 {
     return static_cast<TransformKeyFrame*>(createKeyFrame(timePos));
 }
Ejemplo n.º 5
0
 //--------------------------------------------------------------------------
 NumericKeyFrame* NumericAnimationTrack::createNumericKeyFrame(Real timePos)
 {
     return static_cast<NumericKeyFrame*>(createKeyFrame(timePos));
 }
Ejemplo n.º 6
0
	bool AnimationTrack::loadFromXML(TiXmlElement *xmlNodeTrack)
	{
		xmlNodeTrack->QueryStringAttribute("name",&m_name);			
		stringc dataType;
		xmlNodeTrack->QueryStringAttribute("dataType",&dataType);
		m_dataType = stringToDataType(dataType);
		
		TiXmlHandle hXmlNode(xmlNodeTrack);

		//load keyframes data
		TiXmlElement* xmlNodeTimes = hXmlNode.FirstChild( "times" ).Element();
		if(xmlNodeTimes!=0)
		{
			int kfNum = 0;

			//times
			const char* timesStr = xmlNodeTimes->GetText();
			if(timesStr!=0)
			{
				float *times=0;
				kfNum = StringUtil::splitOutFloats(times, timesStr);

				for(int i=0; i<kfNum; ++i)
				{
					KeyFrame* kf = createKeyFrame();
					if(kf!=0)
					{
						kf->setTime(times[i]);
						m_keyFrames.push_back(kf);
					}
				}

				delete times;
			}

			//at least has 1 kf
			if(kfNum>0)
			{
				//KF datas
				float *kfDatas=0;
				TiXmlElement* xmlNodeKFs = hXmlNode.FirstChild( "keyframes" ).Element();
				if(xmlNodeKFs!=0)
				{
					int valueNum = StringUtil::splitOutFloats(kfDatas, xmlNodeKFs->GetText());
					u32 dataElemNum = m_keyFrames[0]->getDataElementNum();
					FLT_ASSERT(dataElemNum>0 && valueNum/dataElemNum==kfNum);					
					
					for(int i=0; i<kfNum; ++i)
					{
						m_keyFrames[i]->loadValue(kfDatas, i);						
					}

					delete kfDatas;
				}

				//interp datas
				TiXmlElement* xmlNodeInterps = hXmlNode.FirstChild( "interps" ).Element();
				if(xmlNodeInterps!=0)
				{
					array_t<stringc> strs;
					strs = StringUtil::split(xmlNodeInterps->GetText(), ",", kfNum);
										
					FLT_ASSERT(strs.size()==kfNum);					

					for(int i=0; i<kfNum; ++i)
					{
						m_keyFrames[i]->setInterpTypeByString(strs[i]);						
					}					
				}
			}

			//create a computed frame, for interpolation
			m_computedFrame = createKeyFrame();
		}

		return true;
	}