亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区| 亚洲图片自拍偷拍| 日韩精品国产精品| 亚洲人妖av一区二区| 91免费国产在线| 欧美一区二区美女| 成人免费视频在线观看| 日韩成人一级片| 一本一道波多野结衣一区二区| 欧美一级电影网站| 亚洲美女在线一区| 国产成人在线电影| 精品国产一区二区三区不卡| 亚洲国产精品自拍| 91久久精品日日躁夜夜躁欧美| 2023国产精品| 奇米精品一区二区三区四区| 色欧美片视频在线观看在线视频| 久久久久久久精| 麻豆91在线观看| 在线不卡的av| 亚洲高清久久久| 久久精品国产网站| 国产日产欧美一区二区视频| 色综合久久天天| 亚洲韩国一区二区三区| 国产网站一区二区| 7777精品伊人久久久大香线蕉完整版 | 欧美色区777第一页| 欧美成人艳星乳罩| 丝袜美腿成人在线| 91.麻豆视频| 丝袜脚交一区二区| 6080国产精品一区二区| 性久久久久久久久| 欧美日韩一区二区电影| 亚洲午夜精品网| 欧美人牲a欧美精品| 五月天国产精品| 日韩欧美一区二区免费| 美日韩黄色大片| 日韩免费性生活视频播放| 久久精品国产999大香线蕉| 日韩视频123| 国内久久精品视频| 久久精品一区蜜桃臀影院| 国产98色在线|日韩| 国产精品美女久久久久久久| a在线欧美一区| 一级女性全黄久久生活片免费| 欧美日韩精品一区视频| 五月婷婷综合激情| 精品国产乱码久久久久久夜甘婷婷| 久久99精品国产麻豆婷婷洗澡| 久久亚洲私人国产精品va媚药| 91豆麻精品91久久久久久| 夜夜嗨av一区二区三区中文字幕| 在线亚洲+欧美+日本专区| 午夜精品福利在线| 久久久不卡影院| 91网站最新地址| 日韩不卡一区二区| 久久久不卡网国产精品一区| 99re这里都是精品| 美女脱光内衣内裤视频久久网站| 久久天堂av综合合色蜜桃网| 99国产欧美另类久久久精品| 亚洲第一福利一区| 国产亚洲女人久久久久毛片| 日本韩国精品一区二区在线观看| 日本aⅴ精品一区二区三区| 国产精品毛片无遮挡高清| 欧美三级三级三级爽爽爽| 国产一区二区三区| 亚洲国产精品欧美一二99| 久久久久国产一区二区三区四区 | 国产视频一区二区三区在线观看 | 国产精品香蕉一区二区三区| 亚洲精品伦理在线| 久久亚洲综合色| 欧美性做爰猛烈叫床潮| 国产剧情一区二区三区| 亚洲高清视频的网址| 国产精品无圣光一区二区| 91精品一区二区三区在线观看| 国产盗摄视频一区二区三区| 日韩电影网1区2区| 一区二区三区四区五区视频在线观看| 日韩精品在线网站| 欧美日韩一区精品| 91一区在线观看| 国产精品99久久久久久有的能看| 亚洲曰韩产成在线| 日韩一区欧美一区| 国产午夜一区二区三区| 欧美变态tickle挠乳网站| 欧美午夜精品久久久久久孕妇| 风间由美一区二区av101| 久久精品国产一区二区三| 亚洲综合一二三区| 中文字幕色av一区二区三区| 久久久五月婷婷| 日韩丝袜美女视频| 欧美精品一二三| 91福利国产成人精品照片| 一本一本大道香蕉久在线精品| 国产高清在线观看免费不卡| 91视视频在线观看入口直接观看www | 日韩欧美区一区二| 欧美福利电影网| 欧美日韩在线精品一区二区三区激情| 成人激情午夜影院| 大桥未久av一区二区三区中文| 国产在线精品一区二区三区不卡| 日本免费新一区视频| 日本不卡在线视频| 日av在线不卡| 奇米精品一区二区三区四区| 日韩高清在线一区| 日韩成人精品视频| 麻豆精品在线视频| 捆绑调教美女网站视频一区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩精品91亚洲二区在线观看 | 中国色在线观看另类| 中文一区在线播放| 国产精品久久久久久久久晋中| 日本一区二区三区电影| 中文字幕成人网| 依依成人综合视频| 亚洲福中文字幕伊人影院| 日韩福利电影在线| 国产一区二区三区美女| www.av亚洲| 欧美日韩精品综合在线| 日韩精品一区二区三区swag| 久久精品这里都是精品| 国产精品久久久久久久久免费樱桃 | 国产999精品久久久久久| av在线一区二区三区| 欧美性三三影院| 精品日韩在线一区| 中文字幕一区二区三区不卡| 一区二区三区免费看视频| 免费高清不卡av| 成人毛片在线观看| 欧美系列一区二区| 日韩精品一区二区三区视频播放| 久久精品一二三| 亚洲乱码中文字幕| 久久国产婷婷国产香蕉| a4yy欧美一区二区三区| 欧美高清性hdvideosex| 国产婷婷色一区二区三区在线| 亚洲丝袜制服诱惑| 秋霞午夜av一区二区三区| 成人福利视频在线| 欧美一级高清片| 亚洲精品中文在线影院| 麻豆91在线播放免费| 一本久久a久久精品亚洲| 这里只有精品视频在线观看| 亚洲尤物在线视频观看| 久久精品国产一区二区| 在线观看欧美精品| 久久久国产一区二区三区四区小说| 一区二区日韩av| 国产**成人网毛片九色| 欧美一级精品在线| 亚洲裸体xxx| 国产黄色精品网站| 欧美一区中文字幕| 亚洲一二三级电影| 成人手机在线视频| 26uuuu精品一区二区| 首页亚洲欧美制服丝腿| 色综合久久中文综合久久牛| 国产日韩高清在线| 蓝色福利精品导航| 欧美一个色资源| 午夜av一区二区三区| 在线亚洲高清视频| 亚洲欧美日韩国产另类专区| 国产不卡免费视频| 精品成人在线观看| 美国一区二区三区在线播放| 欧美亚洲日本国产| 亚洲精品国产视频| 97精品久久久午夜一区二区三区| 2020国产精品自拍| 久久99精品国产麻豆不卡| 欧美日韩1234| 亚洲午夜成aⅴ人片| 欧美亚洲国产一区二区三区| 亚洲黄色尤物视频| 在线亚洲人成电影网站色www| 国产精品初高中害羞小美女文| 东方aⅴ免费观看久久av| 国产午夜精品理论片a级大结局| 久久99精品国产.久久久久久|