亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? interpolator.cpp

?? 骨骼動畫....把魔獸模型解出的代碼..
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "Interpolator.h"
#include "Model.h"


//+-----------------------------------------------------------------------------
//| Static member variables
//+-----------------------------------------------------------------------------
REFERENCE_OBJECT<INTERPOLATOR*, INTERPOLATOR*> INTERPOLATOR::InterpolatorNodes;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
INTERPOLATOR::INTERPOLATOR()
{
	Name = "";
	GlobalSequenceId = INVALID_INDEX;
	Type = INTERPOLATOR_TYPE_NONE;
	InterpolationType = INTERPOLATION_TYPE_NONE;

	Static = TRUE;
	StaticVector = D3DXVECTOR4(0.0f, 0.0f, 0.0f, 0.0f);
	DefaultVector = D3DXVECTOR4(0.0f, 0.0f, 0.0f, 0.0f);

	GlobalSequenceNode.SetData(this);
	InterpolatorNode.SetData(this);

	InterpolatorNode.Attach(InterpolatorNodes);
}


//+-----------------------------------------------------------------------------
//| Copy constructor
//+-----------------------------------------------------------------------------
INTERPOLATOR::INTERPOLATOR(CONST INTERPOLATOR& CopyObject)
{
	NodeList = CopyObject.NodeList;

	GlobalSequenceId = CopyObject.GlobalSequenceId;
	Type = CopyObject.Type;
	InterpolationType = CopyObject.InterpolationType;

	Static = CopyObject.Static;
	StaticVector = CopyObject.StaticVector;
	DefaultVector = CopyObject.DefaultVector;

	GlobalSequenceNode = CopyObject.GlobalSequenceNode;
	InterpolatorNode = CopyObject.InterpolatorNode;
}


//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
INTERPOLATOR::~INTERPOLATOR()
{
	Clear();

	InterpolatorNode.Detach();
}


//+-----------------------------------------------------------------------------
//| Assignment operator
//+-----------------------------------------------------------------------------
CONST INTERPOLATOR& INTERPOLATOR::operator =(CONST INTERPOLATOR& CopyObject)
{
	NodeList = CopyObject.NodeList;

	GlobalSequenceId = CopyObject.GlobalSequenceId;
	Type = CopyObject.Type;
	InterpolationType = CopyObject.InterpolationType;

	Static = CopyObject.Static;
	StaticVector = CopyObject.StaticVector;
	DefaultVector = CopyObject.DefaultVector;

	GlobalSequenceNode = CopyObject.GlobalSequenceNode;
	InterpolatorNode = CopyObject.InterpolatorNode;

	return (*this);
}


//+-----------------------------------------------------------------------------
//| Clears the interpolator
//+-----------------------------------------------------------------------------
VOID INTERPOLATOR::Clear()
{
	NodeList.clear();

	Type = INTERPOLATOR_TYPE_NONE;
	InterpolationType = INTERPOLATION_TYPE_NONE;

	Static = TRUE;
	StaticVector = D3DXVECTOR4(0.0f, 0.0f, 0.0f, 0.0f);
}


//+-----------------------------------------------------------------------------
//| Returns the mdx size of the interpolator
//+-----------------------------------------------------------------------------
INT INTERPOLATOR::GetSize()
{
	INT NodeSize = 0;
	INT Factor = 1;

	if(GetNrOfNodes() <= 0) return 0;

	switch(InterpolationType)
	{
		case INTERPOLATION_TYPE_HERMITE:
		case INTERPOLATION_TYPE_BEZIER:
		{
			Factor = 3;
			break;
		}
	}

	switch(Type)
	{
		case INTERPOLATOR_TYPE_SCALAR:
		case INTERPOLATOR_TYPE_SCALAR_INT:
		{
			NodeSize = (Factor * 4) + 4;
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR2:
		{
			NodeSize = (Factor * 8) + 4;
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR3:
		{
			NodeSize = (Factor * 12) + 4;
			break;
		}

		case INTERPOLATOR_TYPE_VECTOR4:
		{
			NodeSize = (Factor * 16) + 4;
			break;
		}
	}

	NodeSize *= GetNrOfNodes();

	return NodeSize + 16;
}


//+-----------------------------------------------------------------------------
//| Checks if the interpolator is static
//+-----------------------------------------------------------------------------
BOOL INTERPOLATOR::IsStatic()
{
	return Static;
}


//+-----------------------------------------------------------------------------
//| Returns the nr of nodes
//+-----------------------------------------------------------------------------
INT INTERPOLATOR::GetNrOfNodes()
{
	return static_cast<INT>(NodeList.size());
}


//+-----------------------------------------------------------------------------
//| Adds a new node to the interpolator
//+-----------------------------------------------------------------------------
VOID INTERPOLATOR::AddNode(CONST INTERPOLATOR_NODE& Node)
{
	NodeList.push_back(Node);
	Static = FALSE;
}


//+-----------------------------------------------------------------------------
//| Sets a new type
//+-----------------------------------------------------------------------------
VOID INTERPOLATOR::SetType(INTERPOLATOR_TYPE NewType)
{
	Type = NewType;
}


//+-----------------------------------------------------------------------------
//| Returns the type
//+-----------------------------------------------------------------------------
INTERPOLATOR_TYPE INTERPOLATOR::GetType()
{
	return Type;
}


//+-----------------------------------------------------------------------------
//| Sets a new interpoaltion type
//+-----------------------------------------------------------------------------
VOID INTERPOLATOR::SetInterpolationType(INTERPOLATION_TYPE NewInterpolationType)
{
	InterpolationType = NewInterpolationType;
}


//+-----------------------------------------------------------------------------
//| Returns the interpolation type
//+-----------------------------------------------------------------------------
INTERPOLATION_TYPE INTERPOLATOR::GetInterpolationType()
{
	return InterpolationType;
}


//+-----------------------------------------------------------------------------
//| Sets a new global sequence ID
//+-----------------------------------------------------------------------------
VOID INTERPOLATOR::SetGlobalSequenceId(INT NewGlobalSequenceId)
{
	GlobalSequenceId = NewGlobalSequenceId;
}


//+-----------------------------------------------------------------------------
//| Returns the global sequence ID
//+-----------------------------------------------------------------------------
INT INTERPOLATOR::GetGlobalSequenceId()
{
	return GlobalSequenceId;
}


//+-----------------------------------------------------------------------------
//| Saves the interpolator
//+-----------------------------------------------------------------------------
BOOL INTERPOLATOR::Save(DATA_OUT_STREAM& DataStream, BOOL ReverseXZ)
{
	std::list<INTERPOLATOR_NODE>::iterator i;

	DataStream.WriteDWord(static_cast<DWORD>(NodeList.size()));
	switch(InterpolationType)
	{
		case INTERPOLATION_TYPE_NONE:
		{
			DataStream.WriteDWord(0);
			break;
		}

		case INTERPOLATION_TYPE_LINEAR:
		{
			DataStream.WriteDWord(1);
			break;
		}

		case INTERPOLATION_TYPE_HERMITE:
		{
			DataStream.WriteDWord(2);
			break;
		}

		case INTERPOLATION_TYPE_BEZIER:
		{
			DataStream.WriteDWord(3);
			break;
		}
	}

	DataStream.WriteDWord((GlobalSequenceId == INVALID_INDEX) ? 0xFFFFFFFF : GlobalSequenceId);

	i = NodeList.begin();
	while(i != NodeList.end())
	{
		DataStream.WriteDWord(i->Time);

		switch(Type)
		{
			case INTERPOLATOR_TYPE_SCALAR:
			{
				DataStream.WriteFloat(i->Vector.x);
				break;
			}

			case INTERPOLATOR_TYPE_SCALAR_INT:
			{
				DataStream.WriteDWord(static_cast<DWORD>(i->Vector.x));
				break;
			}

			case INTERPOLATOR_TYPE_VECTOR2:
			{
				DataStream.WriteFloat(i->Vector.x);
				DataStream.WriteFloat(i->Vector.y);
				break;
			}

			case INTERPOLATOR_TYPE_VECTOR3:
			{
				if(ReverseXZ)
				{
					DataStream.WriteFloat(i->Vector.z);
					DataStream.WriteFloat(i->Vector.y);
					DataStream.WriteFloat(i->Vector.x);
				}
				else
				{
					DataStream.WriteFloat(i->Vector.x);
					DataStream.WriteFloat(i->Vector.y);
					DataStream.WriteFloat(i->Vector.z);
				}
				break;
			}

			case INTERPOLATOR_TYPE_VECTOR4:
			{
				DataStream.WriteFloat(i->Vector.x);
				DataStream.WriteFloat(i->Vector.y);
				DataStream.WriteFloat(i->Vector.z);
				DataStream.WriteFloat(i->Vector.w);
				break;
			}
		}

		switch(InterpolationType)
		{
			case INTERPOLATION_TYPE_HERMITE:
			case INTERPOLATION_TYPE_BEZIER:
			{
				switch(Type)
				{
					case INTERPOLATOR_TYPE_SCALAR:
					{
						DataStream.WriteFloat(i->InTan.x);
						DataStream.WriteFloat(i->OutTan.x);
						break;
					}

					case INTERPOLATOR_TYPE_SCALAR_INT:
					{
						DataStream.WriteDWord(static_cast<DWORD>(i->InTan.x));
						DataStream.WriteDWord(static_cast<DWORD>(i->OutTan.x));
						break;
					}

					case INTERPOLATOR_TYPE_VECTOR2:
					{
						DataStream.WriteFloat(i->InTan.x);
						DataStream.WriteFloat(i->InTan.y);
						DataStream.WriteFloat(i->OutTan.x);
						DataStream.WriteFloat(i->OutTan.y);
						break;
					}

					case INTERPOLATOR_TYPE_VECTOR3:
					{
						if(ReverseXZ)
						{
							DataStream.WriteFloat(i->InTan.z);
							DataStream.WriteFloat(i->InTan.y);
							DataStream.WriteFloat(i->InTan.x);
							DataStream.WriteFloat(i->OutTan.z);
							DataStream.WriteFloat(i->OutTan.y);
							DataStream.WriteFloat(i->OutTan.x);
						}
						else
						{
							DataStream.WriteFloat(i->InTan.x);
							DataStream.WriteFloat(i->InTan.y);
							DataStream.WriteFloat(i->InTan.z);
							DataStream.WriteFloat(i->OutTan.x);
							DataStream.WriteFloat(i->OutTan.y);
							DataStream.WriteFloat(i->OutTan.z);
						}
						break;
					}

					case INTERPOLATOR_TYPE_VECTOR4:
					{
						DataStream.WriteFloat(i->InTan.x);
						DataStream.WriteFloat(i->InTan.y);
						DataStream.WriteFloat(i->InTan.z);
						DataStream.WriteFloat(i->InTan.w);
						DataStream.WriteFloat(i->OutTan.x);
						DataStream.WriteFloat(i->OutTan.y);
						DataStream.WriteFloat(i->OutTan.z);
						DataStream.WriteFloat(i->OutTan.w);
						break;
					}
				}

				break;
			}
		}

		i++;
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Loads an interpolator
//+-----------------------------------------------------------------------------
BOOL INTERPOLATOR::Load(DATA_IN_STREAM& DataStream, BOOL ReverseXZ)
{
	INT i;
	INT NodeListSize;
	INTERPOLATOR_NODE Node;

	NodeList.clear();

	NodeListSize = DataStream.ReadDWord();

	switch(DataStream.ReadDWord())
	{
		case 0:
		{
			InterpolationType = INTERPOLATION_TYPE_NONE;
			break;
		}

		case 1:
		{
			InterpolationType = INTERPOLATION_TYPE_LINEAR;
			break;
		}

		case 2:
		{
			InterpolationType = INTERPOLATION_TYPE_HERMITE;
			break;
		}

		case 3:
		{
			InterpolationType = INTERPOLATION_TYPE_BEZIER;
			break;
		}

		default:
		{
			Error.SetMessage("Unknown interpolation type!");
			return FALSE;
		}
	}

	GlobalSequenceId = DataStream.ReadDWord();

	for(i = 0; i < NodeListSize; i++)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕欧美日本乱码一线二线| 精品理论电影在线观看| 欧美日韩一本到| 日韩一区欧美二区| ...中文天堂在线一区| 亚洲成av人片在线观看| 91激情五月电影| 丁香婷婷综合激情五月色| 日韩精品三区四区| 亚洲免费三区一区二区| 国产日产精品1区| 日韩欧美一级二级三级| 欧美日韩精品高清| 一本一道综合狠狠老| 国产一区二区电影| 麻豆精品新av中文字幕| 日日嗨av一区二区三区四区| 亚洲自拍偷拍欧美| 一区在线播放视频| 国产精品美女久久久久久久网站| 日韩三级.com| 欧美一区午夜精品| 欧美日韩免费在线视频| 色综合天天性综合| 91视频xxxx| 91在线观看地址| gogogo免费视频观看亚洲一| 国产一区二区三区精品欧美日韩一区二区三区 | 韩国av一区二区三区在线观看| 亚洲成人福利片| 亚洲国产视频网站| 亚洲综合小说图片| 性做久久久久久免费观看欧美| 亚洲精品国产高清久久伦理二区| 《视频一区视频二区| 亚洲欧洲另类国产综合| 亚洲欧美自拍偷拍色图| 成人欧美一区二区三区黑人麻豆 | 2023国产精品自拍| 日韩一区二区三区电影| 日韩精品一区二区三区swag| 日韩一区二区视频| 精品久久久久久最新网址| 欧美一级日韩不卡播放免费| 日韩写真欧美这视频| 欧美电影一区二区| 欧美一二三四在线| 精品日韩99亚洲| 精品奇米国产一区二区三区| 亚洲精品一区二区三区四区高清| 日韩三级精品电影久久久| 欧美成人精品福利| 国产拍揄自揄精品视频麻豆| 中文字幕欧美日韩一区| 亚洲精品免费一二三区| 午夜精品在线看| 美女国产一区二区| 国产福利视频一区二区三区| 国产a区久久久| jlzzjlzz亚洲日本少妇| 在线亚洲免费视频| 欧美老女人在线| 精品国产1区二区| 亚洲国产精品av| 亚洲综合一区二区精品导航| 蜜桃久久av一区| 国产成人精品一区二区三区网站观看| www.视频一区| 欧美精品在线观看一区二区| 精品对白一区国产伦| 国产精品热久久久久夜色精品三区 | 亚洲国产毛片aaaaa无费看| 日本女人一区二区三区| 国产精品一区二区三区四区| 色综合久久综合网欧美综合网| 国产精品影视在线| 色综合天天做天天爱| 日韩欧美色电影| 国产精品久久99| 日韩黄色片在线观看| 国产精品996| 欧美午夜在线一二页| 久久久蜜臀国产一区二区| 一区二区三区在线影院| 九一九一国产精品| 99久久精品一区二区| 精品少妇一区二区三区在线播放 | 不卡av在线网| 日韩免费视频线观看| 亚洲欧洲中文日韩久久av乱码| 午夜免费久久看| 成人国产免费视频| 日韩亚洲欧美中文三级| 亚洲精品欧美激情| 国产成人av一区| 欧美一二区视频| 亚洲综合男人的天堂| 高清不卡一区二区| 91精品麻豆日日躁夜夜躁| 欧美性色综合网| 国产欧美精品国产国产专区| 亚洲国产精品综合小说图片区| 国产激情视频一区二区三区欧美| 色吊一区二区三区| 一区二区在线看| 成人小视频免费在线观看| 日韩精品自拍偷拍| 亚洲一区成人在线| 欧美在线播放高清精品| 亚洲人成亚洲人成在线观看图片 | 欧美精品一区二区三区蜜桃| 一区二区激情视频| 色综合天天狠狠| 一区二区三区四区不卡视频| 欧美日韩日日摸| 日本中文一区二区三区| 欧美日韩激情一区| 成人免费小视频| 三级一区在线视频先锋| 欧美精品一区二区三区在线播放| 欧美日本韩国一区| 色一情一伦一子一伦一区| 99久久综合狠狠综合久久| 91精品综合久久久久久| 亚洲电影在线播放| 欧美中文一区二区三区| 亚洲精品国产精华液| 色婷婷国产精品久久包臀| 亚洲欧美自拍偷拍色图| 99精品桃花视频在线观看| 国产精品午夜在线| 不卡的av在线播放| 中文字幕在线不卡一区二区三区| 欧美成人a在线| 国产精品资源网站| 综合电影一区二区三区 | 日韩伦理av电影| 精品奇米国产一区二区三区| 韩国女主播一区| 欧美国产精品久久| 欧美日韩精品专区| 国产一区二区三区久久悠悠色av | 亚洲午夜羞羞片| 亚洲一区成人在线| 日韩av电影一区| 欧美xxxxx裸体时装秀| 国产精品一区专区| 中文字幕乱码久久午夜不卡 | 国产精品白丝jk黑袜喷水| 国产亚洲婷婷免费| 成人免费高清在线| 一区二区三区欧美| 51午夜精品国产| 国内精品伊人久久久久av一坑 | 国产精品一区在线观看乱码| 中文欧美字幕免费| 色婷婷香蕉在线一区二区| 亚洲综合色区另类av| 91精品国产综合久久香蕉的特点 | 在线成人小视频| 久久99久久久欧美国产| 国产欧美日韩视频在线观看| 97久久人人超碰| 五月综合激情婷婷六月色窝| 精品国产精品网麻豆系列| 成人av网址在线观看| 亚洲成va人在线观看| 日韩一级精品视频在线观看| 国产**成人网毛片九色 | 午夜精品久久久久| 久久久精品欧美丰满| 91麻豆123| 久久精品国产久精国产爱| 中文字幕一区二区三区精华液| 欧美亚洲图片小说| 国产一区二区三区精品视频| 亚洲精品视频在线观看免费| 日韩一区二区三区免费看| www.欧美精品一二区| 日本麻豆一区二区三区视频| 亚洲欧洲性图库| 精品国偷自产国产一区| 99热这里都是精品| 久久99久久99| 中文字幕第一区| 亚洲日本护士毛茸茸| 五月激情丁香一区二区三区| 午夜免费久久看| 国产福利91精品| 欧洲精品一区二区三区在线观看| 欧美日韩在线精品一区二区三区激情| 欧美日韩在线直播| 久久久久久久久久看片| 亚洲精品第1页| 国产老妇另类xxxxx| 日本久久一区二区三区| 欧美精品一区二区三区四区| 亚洲欧洲精品一区二区三区| 五月天激情小说综合| 成人18视频在线播放|