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

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

?? modelgeoset.cpp

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


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
MODEL_GEOSET::MODEL_GEOSET()
{
	MeshBuildt = TRUE;

	GeosetAlpha = 1.0f;
	GeosetColor = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);

	MaterialNode.SetData(this);
	BoneNodes.SetData(this);
	GeosetAnimationNodes.SetData(this);
}


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


//+-----------------------------------------------------------------------------
//| Clears the geoset
//+-----------------------------------------------------------------------------
VOID MODEL_GEOSET::Clear()
{
	INT i;

	for(i = 0; i < GeosetData.GroupContainer.GetTotalSize(); i++)
	{
		if(GeosetData.GroupContainer.ValidIndex(i))
		{
			GeosetData.GroupContainer[i]->Clear();
		}
	}

	SAFE_CLEAR(GeosetData.VertexContainer);
	SAFE_CLEAR(GeosetData.FaceContainer);
	SAFE_CLEAR(GeosetData.GroupContainer);
	SAFE_CLEAR(GeosetData.ExtentContainer);

	MeshBuildt = TRUE;

	GeosetAlpha = 1.0f;
	GeosetColor = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);

	GeosetData = MODEL_GEOSET_DATA();
}


//+-----------------------------------------------------------------------------
//| Returns the mdx size of the geoset
//+-----------------------------------------------------------------------------
INT MODEL_GEOSET::GetSize()
{
	INT i;
	INT Size = 136;

	Size += (GeosetData.VertexContainer.GetSize() * 33);
	Size += (GeosetData.FaceContainer.GetSize() * 6);
	Size += (GeosetData.GroupContainer.GetSize() * 4);
	Size += (GeosetData.ExtentContainer.GetSize() * 28);

	for(i = 0; i < GeosetData.GroupContainer.GetTotalSize(); i++)
	{
		if(GeosetData.GroupContainer.ValidIndex(i))
		{
			Size += (GeosetData.GroupContainer[i]->MatrixListSize * 4);
		}
	}

	return Size;
}


//+-----------------------------------------------------------------------------
//| Returns a reference to the data
//+-----------------------------------------------------------------------------
MODEL_GEOSET_DATA& MODEL_GEOSET::Data()
{
	return GeosetData;
}


//+-----------------------------------------------------------------------------
//| Returns the render order
//+-----------------------------------------------------------------------------
INT MODEL_GEOSET::GetRenderOrder()
{
	if(!MaterialNode.IsAttached()) return 0;

	return MaterialNode.GetObjectData()->GetRenderOrder();
}


//+-----------------------------------------------------------------------------
//| Returns a reference to the alpha
//+-----------------------------------------------------------------------------
FLOAT& MODEL_GEOSET::Alpha()
{
	return GeosetAlpha;
}


//+-----------------------------------------------------------------------------
//| Returns a reference to the color
//+-----------------------------------------------------------------------------
D3DXCOLOR& MODEL_GEOSET::Color()
{
	return GeosetColor;
}


//+-----------------------------------------------------------------------------
//| Rebuilds the geoset the next time it's rendered
//+-----------------------------------------------------------------------------
VOID MODEL_GEOSET::Rebuild()
{
	MeshBuildt = FALSE;
}


//+-----------------------------------------------------------------------------
//| Renders the geoset
//+-----------------------------------------------------------------------------
VOID MODEL_GEOSET::Render(CONST SEQUENCE_TIME& Time, BOOL Animated)
{
	INT i;
	D3DXMATRIX Matrix;
	MESH* CurrentMesh;
	MODEL_MATERIAL* Material;
	MODEL_MATERIAL_LAYER* Layer;
	MODEL_TEXTURE_ANIMATION* TextureAnimation;

	D3DXMatrixIdentity(&Matrix);
	Graphics.SetWorldMatrix(Matrix);

	if(FlashingGeoset.IsFlashing()) MeshBuildt = FALSE;

	BuildMesh();

	if(Animated)
	{
		BuildAnimatedMesh(Time);
		CurrentMesh = &AnimatedMesh;

		if(GeosetAlpha <= 0.01f) return;
	}
	else
	{
		CurrentMesh = &Mesh;
	}

	if(!MaterialNode.IsAttached()) return;
	Material = MaterialNode.GetObjectData();

	for(i = 0; i < Material->Data().LayerContainer.GetTotalSize(); i++)
	{
		if(!Material->Data().LayerContainer.ValidIndex(i)) continue;
		Layer = Material->Data().LayerContainer[i];

		TextureAnimation = Layer->TextureAnimationNode.IsAttached() ? Layer->TextureAnimationNode.GetObjectData() : NULL;

		BuildAnimatedTexture(Time, TextureAnimation, Layer->Data().Alpha.GetScalar(Time));
		Layer->UseMaterial(Time);
		CurrentMesh->Render();
	}
}


//+-----------------------------------------------------------------------------
//| Renders the geoset in a view
//+-----------------------------------------------------------------------------
VOID MODEL_GEOSET::RenderInView()
{
	Mesh.Render();
}


//+-----------------------------------------------------------------------------
//| Builds a mesh from the vertex and face information
//+-----------------------------------------------------------------------------
BOOL MODEL_GEOSET::BuildMesh()
{
	INT i;
	INT NrOfVertices;
	INT NrOfFaces;
	VERTEX* VertexPointer;
	VERTEX* AnimatedVertexPointer;
	WORD* IndexPointer;
	WORD* AnimatedIndexPointer;
	D3DCOLOR Color;

	if(MeshBuildt) return TRUE;

	NrOfVertices = GeosetData.VertexContainer.GetSize();
	if(NrOfVertices <= 0) return FALSE;

	NrOfFaces = GeosetData.FaceContainer.GetSize();
	if(NrOfFaces <= 0) return FALSE;

	if(!Mesh.Create(NrOfVertices, NrOfFaces)) return FALSE;
	if(!AnimatedMesh.Create(NrOfVertices, NrOfFaces)) return FALSE;

	if(!Mesh.LockVertexBuffer(&VertexPointer)) return FALSE;
	if(!AnimatedMesh.LockVertexBuffer(&AnimatedVertexPointer))
	{
		Mesh.UnlockVertexBuffer();
		return FALSE;
	}

	if(FlashingGeoset.GetGeoset() == this)
	{
		D3DXCOLOR TempColor;

		TempColor = FlashingGeoset.GetColor();
		Color = D3DCOLOR_COLORVALUE(TempColor.r, TempColor.g, TempColor.b, TempColor.a);
	}
	else
	{
		Color = 0xFFFFFFFF;
	}

	for(i = 0; i < GeosetData.VertexContainer.GetTotalSize(); i++)
	{
		if(GeosetData.VertexContainer.ValidIndex(i))
		{
			VertexPointer->Position = GeosetData.VertexContainer[i]->Position;
			VertexPointer->Normal = GeosetData.VertexContainer[i]->Normal;
			VertexPointer->Color = Color;
			VertexPointer->TexturePosition = GeosetData.VertexContainer[i]->TexturePosition;

			AnimatedVertexPointer->Position = VertexPointer->Position;
			AnimatedVertexPointer->Normal = VertexPointer->Normal;
			AnimatedVertexPointer->Color = VertexPointer->Color;
			AnimatedVertexPointer->TexturePosition = VertexPointer->TexturePosition;

			VertexPointer++;
			AnimatedVertexPointer++;
		}
	}

	AnimatedMesh.UnlockVertexBuffer();
	Mesh.UnlockVertexBuffer();

	if(!Mesh.LockIndexBuffer(&IndexPointer)) return FALSE;
	if(!AnimatedMesh.LockIndexBuffer(&AnimatedIndexPointer))
	{
		Mesh.UnlockIndexBuffer();
		return FALSE;
	}

	for(i = 0; i < GeosetData.FaceContainer.GetTotalSize(); i++)
	{
		if(GeosetData.FaceContainer.ValidIndex(i))
		{
			(*IndexPointer) = GeosetData.FaceContainer[i]->Index1;
			(*AnimatedIndexPointer) = (*IndexPointer);
			IndexPointer++;
			AnimatedIndexPointer++;

			(*IndexPointer) = GeosetData.FaceContainer[i]->Index2;
			(*AnimatedIndexPointer) = (*IndexPointer);
			IndexPointer++;
			AnimatedIndexPointer++;

			(*IndexPointer) = GeosetData.FaceContainer[i]->Index3;
			(*AnimatedIndexPointer) = (*IndexPointer);
			IndexPointer++;
			AnimatedIndexPointer++;
		}
	}

	AnimatedMesh.UnlockIndexBuffer();
	Mesh.UnlockIndexBuffer();

	MeshBuildt = TRUE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Builds an animated mesh from the mesh and group information
//+-----------------------------------------------------------------------------
BOOL MODEL_GEOSET::BuildAnimatedMesh(CONST SEQUENCE_TIME& Time)
{
	INT i;
	INT j;
	INT GroupIndex;
	FLOAT TempAlpha;
	D3DXVECTOR3 TempColor;
	VERTEX* VertexPointer;
	VERTEX* AnimatedVertexPointer;
	MODEL_BASE* Node;
	MODEL_GEOSET_GROUP* GeosetGroup;
	MODEL_GEOSET_GROUP_NODE* GeosetGroupNode;
	REFERENCE<MODEL_GEOSET_ANIMATION*, MODEL_GEOSET*>* CurrentReference;

	if(FlashingGeoset.GetGeoset() == this)
	{
		GeosetAlpha = 1.0f;
		GeosetColor = FlashingGeoset.GetColor();
	}
	else
	{
		GeosetAlpha = 1.0f;
		GeosetColor = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
	}

	CurrentReference = GeosetAnimationNodes.GetFirstReference();
	while(CurrentReference != NULL)
	{
		TempAlpha = CurrentReference->GetData()->Data().Alpha.GetScalar(Time);
		GeosetAlpha *= TempAlpha;

		if(CurrentReference->GetData()->Data().UseColor)
		{
			TempColor = CurrentReference->GetData()->Data().Color.GetVector3(Time);
			GeosetColor.r *= TempColor.z;
			GeosetColor.g *= TempColor.y;
			GeosetColor.b *= TempColor.x;
			GeosetColor.a *= TempAlpha;
		}

		CurrentReference = GeosetAnimationNodes.GetNextReference(CurrentReference);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合日日夜夜| 人人精品人人爱| 成人福利视频在线看| 国产视频一区二区在线观看| 国产高清久久久久| 中文文精品字幕一区二区| 国产乱对白刺激视频不卡| 国产色产综合色产在线视频| 成人精品在线视频观看| 最近日韩中文字幕| 欧美午夜精品久久久| 日本不卡免费在线视频| 欧美v亚洲v综合ⅴ国产v| 国产精品中文字幕日韩精品| 国产精品毛片高清在线完整版| 99久久精品免费看国产| 亚洲v中文字幕| 亚洲精品一区二区三区影院| 国产精品888| 亚洲精品美国一| 日韩欧美中文字幕公布| 成人免费视频免费观看| 亚洲电影你懂得| 欧美不卡在线视频| 成人av电影在线| 天堂一区二区在线免费观看| 精品蜜桃在线看| 91年精品国产| 蜜桃视频一区二区三区在线观看| 久久久久成人黄色影片| 91国产福利在线| 久久91精品国产91久久小草| 中文字幕不卡在线| 欧美久久久久久蜜桃| 成人丝袜视频网| 奇米四色…亚洲| 亚洲精品日韩专区silk| 精品精品欲导航| 91女厕偷拍女厕偷拍高清| 经典三级在线一区| 亚洲一区影音先锋| 国产人久久人人人人爽| 欧美日韩免费观看一区二区三区| 国产一区二区精品久久99| 玉米视频成人免费看| 久久这里只有精品首页| 欧美亚洲一区三区| 成人av电影在线网| 国产真实乱对白精彩久久| 五月天激情综合| 亚洲免费毛片网站| 国产午夜精品久久久久久免费视 | 国产精品一色哟哟哟| 一区二区欧美视频| 欧美国产一区在线| 欧美mv日韩mv国产| 欧美狂野另类xxxxoooo| 色吧成人激情小说| 成人黄色电影在线| 国产一区二区三区精品视频| 日韩精品成人一区二区在线| 一区二区三区.www| 国产精品女同一区二区三区| 久久欧美中文字幕| 欧美男男青年gay1069videost| 99精品欧美一区二区三区综合在线| 国产在线看一区| 日韩激情一区二区| 日韩电影在线免费看| 亚洲精品日韩综合观看成人91| 国产精品传媒视频| 国产欧美日韩不卡免费| 国产视频一区二区三区在线观看| 精品国产3级a| 精品国产污网站| 精品国产一二三| 久久久久99精品一区| 亚洲精品一区二区三区精华液| 欧美成人一区二区| 欧美成人高清电影在线| 久久综合九色综合欧美就去吻| 日韩欧美在线观看一区二区三区| 91精品国产综合久久久久久漫画| 欧美群妇大交群中文字幕| 欧美日韩另类国产亚洲欧美一级| 欧美日韩亚洲综合一区二区三区| 欧美性生活久久| 在线电影院国产精品| 91精品久久久久久蜜臀| 欧美一区二区三区免费| 欧美一区二区免费观在线| 日韩一区和二区| 久久久精品综合| 国产精品视频在线看| 18欧美亚洲精品| 一区二区三区在线观看视频| 亚洲国产色一区| 日韩国产欧美三级| 国产黑丝在线一区二区三区| 91捆绑美女网站| 欧美浪妇xxxx高跟鞋交| 精品国产成人系列| 国产精品福利在线播放| 亚洲精品国产第一综合99久久| 亚洲五月六月丁香激情| 久久99久久99小草精品免视看| 国产高清无密码一区二区三区| 色综合天天天天做夜夜夜夜做| 欧美中文字幕亚洲一区二区va在线| 欧美日韩精品三区| 久久先锋影音av| 亚洲色图19p| 日本中文字幕一区| www.欧美日韩| 欧美日本在线看| 国产精品丝袜在线| 日韩精品一二三| 99re66热这里只有精品3直播 | 蜜臀a∨国产成人精品| 国产精品一区三区| 欧美午夜不卡在线观看免费| 欧美精品一区二| 尤物在线观看一区| 激情av综合网| 欧美性生交片4| 国产精品每日更新在线播放网址| 日韩精品成人一区二区三区| 懂色av中文一区二区三区 | 91影视在线播放| 日韩精品一区二区三区在线观看| 国产精品大尺度| 久久97超碰色| 欧美日韩国产美| 国产精品久久福利| 狠狠久久亚洲欧美| 欧美精品第1页| 亚洲图片激情小说| 国产精品系列在线播放| 欧美人伦禁忌dvd放荡欲情| 国产精品免费视频观看| 国产一区二区三区免费看| 欧美裸体bbwbbwbbw| 日韩一区欧美一区| 国产精品18久久久久久久久| 777午夜精品视频在线播放| 亚洲欧美日韩久久| 国产精品一区二区久久不卡| 欧美群妇大交群中文字幕| 一区二区三区欧美久久| 99国产精品一区| 日本一区二区久久| 国产成a人亚洲精| 欧美精品一区二区三区在线| 免费高清不卡av| 日韩欧美一级片| 日本不卡123| 在线播放日韩导航| 水野朝阳av一区二区三区| 欧美日韩国产综合一区二区三区| 一区二区三区在线观看动漫 | 色悠悠久久综合| 自拍偷拍国产精品| 99久久精品免费看国产| 亚洲色图欧美在线| 在线中文字幕不卡| 亚洲一区在线观看免费| 欧美日韩综合一区| 偷窥国产亚洲免费视频| 91精品国产一区二区三区蜜臀 | 天天亚洲美女在线视频| 色成年激情久久综合| 亚洲自拍都市欧美小说| 91免费版pro下载短视频| 日韩欧美电影一二三| 九色综合国产一区二区三区| 91精品久久久久久久久99蜜臂| 亚洲成人高清在线| 91精品国产福利在线观看| 亚洲午夜三级在线| 欧洲精品在线观看| 国产精品剧情在线亚洲| 91美女片黄在线| 自拍偷拍国产精品| 在线影院国内精品| 无码av免费一区二区三区试看| 欧美三级电影网站| 亚洲成人黄色小说| 欧美日韩国产成人在线91| 亚洲一区影音先锋| 欧美精品色一区二区三区| 奇米影视一区二区三区小说| 日韩亚洲国产中文字幕欧美| 蜜臀久久久久久久| 91精品国产全国免费观看| 美女网站视频久久| 久久免费国产精品| 国产成人夜色高潮福利影视| 亚洲欧美在线观看| 在线日韩一区二区| 午夜精品久久久久久久久|