⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modelbuilder.cpp

📁 骨骼动画....把魔兽模型解出的代码..
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	ModelParticleEmitter2->Data().SegmentColor1.x = ParticleEmitter2.Segment1.Color.B;
	ModelParticleEmitter2->Data().SegmentColor1.y = ParticleEmitter2.Segment1.Color.G;
	ModelParticleEmitter2->Data().SegmentColor1.z = ParticleEmitter2.Segment1.Color.R;
	ModelParticleEmitter2->Data().Alpha.x = ParticleEmitter2.Segment1.Alpha * 255.0f;
	ModelParticleEmitter2->Data().ParticleScaling.x = ParticleEmitter2.Segment1.Scaling;

	ModelParticleEmitter2->Data().SegmentColor2.x = ParticleEmitter2.Segment2.Color.B;
	ModelParticleEmitter2->Data().SegmentColor2.y = ParticleEmitter2.Segment2.Color.G;
	ModelParticleEmitter2->Data().SegmentColor2.z = ParticleEmitter2.Segment2.Color.R;
	ModelParticleEmitter2->Data().Alpha.y = ParticleEmitter2.Segment2.Alpha * 255.0f;
	ModelParticleEmitter2->Data().ParticleScaling.y = ParticleEmitter2.Segment2.Scaling;

	ModelParticleEmitter2->Data().SegmentColor2.x = ParticleEmitter2.Segment2.Color.B;
	ModelParticleEmitter2->Data().SegmentColor2.y = ParticleEmitter2.Segment2.Color.G;
	ModelParticleEmitter2->Data().SegmentColor2.z = ParticleEmitter2.Segment2.Color.R;
	ModelParticleEmitter2->Data().Alpha.z = ParticleEmitter2.Segment3.Alpha * 255.0f;
	ModelParticleEmitter2->Data().ParticleScaling.z = ParticleEmitter2.Segment3.Scaling;

	ModelParticleEmitter2->Data().HeadLifeSpan.x = static_cast<FLOAT>(ParticleEmitter2.HeadLifeSpan.Start);
	ModelParticleEmitter2->Data().HeadLifeSpan.y = static_cast<FLOAT>(ParticleEmitter2.HeadLifeSpan.End);
	ModelParticleEmitter2->Data().HeadLifeSpan.z = static_cast<FLOAT>(ParticleEmitter2.HeadLifeSpan.Repeat);
	ModelParticleEmitter2->Data().HeadDecay.x = static_cast<FLOAT>(ParticleEmitter2.HeadDecay.Start);
	ModelParticleEmitter2->Data().HeadDecay.y = static_cast<FLOAT>(ParticleEmitter2.HeadDecay.End);
	ModelParticleEmitter2->Data().HeadDecay.z = static_cast<FLOAT>(ParticleEmitter2.HeadDecay.Repeat);
	ModelParticleEmitter2->Data().TailLifeSpan.x = static_cast<FLOAT>(ParticleEmitter2.TailLifeSpan.Start);
	ModelParticleEmitter2->Data().TailLifeSpan.y = static_cast<FLOAT>(ParticleEmitter2.TailLifeSpan.End);
	ModelParticleEmitter2->Data().TailLifeSpan.z = static_cast<FLOAT>(ParticleEmitter2.TailLifeSpan.Repeat);
	ModelParticleEmitter2->Data().TailDecay.x = static_cast<FLOAT>(ParticleEmitter2.TailDecay.Start);
	ModelParticleEmitter2->Data().TailDecay.y = static_cast<FLOAT>(ParticleEmitter2.TailDecay.End);
	ModelParticleEmitter2->Data().TailDecay.z = static_cast<FLOAT>(ParticleEmitter2.TailDecay.Repeat);

	ModelParticleEmitter2->Data().Rows = ParticleEmitter2.Rows;
	ModelParticleEmitter2->Data().Columns = ParticleEmitter2.Columns;
	ModelParticleEmitter2->Data().TextureId = ParticleEmitter2.TextureId;
	ModelParticleEmitter2->Data().PriorityPlane = ParticleEmitter2.PriorityPlane;
	ModelParticleEmitter2->Data().ReplaceableId = ParticleEmitter2.ReplaceableId;
	ModelParticleEmitter2->Data().Time = ParticleEmitter2.Time;
	ModelParticleEmitter2->Data().LifeSpan = ParticleEmitter2.LifeSpan;
	ModelParticleEmitter2->Data().TailLength = ParticleEmitter2.TailLength;

	ModelParticleEmitter2->Data().SortPrimitivesFarZ = ParticleEmitter2.SortPrimitivesFarZ;
	ModelParticleEmitter2->Data().LineEmitter = ParticleEmitter2.LineEmitter;
	ModelParticleEmitter2->Data().ModelSpace = ParticleEmitter2.ModelSpace;
	ModelParticleEmitter2->Data().AlphaKey = ParticleEmitter2.AlphaKey;
	ModelParticleEmitter2->Data().Unshaded = ParticleEmitter2.Unshaded;
	ModelParticleEmitter2->Data().Unfogged = ParticleEmitter2.Unfogged;
	ModelParticleEmitter2->Data().XYQuad = ParticleEmitter2.XYQuad;
	ModelParticleEmitter2->Data().Squirt = ParticleEmitter2.Squirt;
	ModelParticleEmitter2->Data().Head = ParticleEmitter2.Head;
	ModelParticleEmitter2->Data().Tail = ParticleEmitter2.Tail;

	if(!Model.AddParticleEmitter2(ModelParticleEmitter2)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a ribbon emitter
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateRibbonEmitter(CONST WAR3_MODEL_RIBBON_EMITTER& RibbonEmitter)
{
	MODEL_RIBBON_EMITTER* ModelRibbonEmitter;

	ModelRibbonEmitter = new MODEL_RIBBON_EMITTER();
	if(ModelRibbonEmitter == NULL) return FALSE;

	ModelRibbonEmitter->Data().Name = RibbonEmitter.Node.Name;
	ModelRibbonEmitter->Data().ObjectId = RibbonEmitter.Node.ObjectId;
	ModelRibbonEmitter->Data().ParentId = RibbonEmitter.Node.ParentId;
	ModelRibbonEmitter->Data().DontInheritTranslation = RibbonEmitter.Node.DontInheritTranslation;
	ModelRibbonEmitter->Data().DontInheritRotation = RibbonEmitter.Node.DontInheritRotation;
	ModelRibbonEmitter->Data().DontInheritScaling = RibbonEmitter.Node.DontInheritScaling;
	ModelRibbonEmitter->Data().Billboarded = RibbonEmitter.Node.Billboarded;
	ModelRibbonEmitter->Data().BillboardedLockX = RibbonEmitter.Node.BillboardedLockX;
	ModelRibbonEmitter->Data().BillboardedLockY = RibbonEmitter.Node.BillboardedLockY;
	ModelRibbonEmitter->Data().BillboardedLockZ = RibbonEmitter.Node.BillboardedLockZ;
	ModelRibbonEmitter->Data().CameraAnchored = RibbonEmitter.Node.CameraAnchored;

	ModelRibbonEmitter->Data().Color.SetStaticVector3(D3DXVECTOR3(RibbonEmitter.Color.B, RibbonEmitter.Color.G, RibbonEmitter.Color.R));

	ModelRibbonEmitter->Data().HeightAbove.SetStaticScalar(RibbonEmitter.HeightAbove);
	ModelRibbonEmitter->Data().HeightBelow.SetStaticScalar(RibbonEmitter.HeightBelow);
	ModelRibbonEmitter->Data().Alpha.SetStaticScalar(RibbonEmitter.Alpha);
	ModelRibbonEmitter->Data().TextureSlot.SetStaticScalar(RibbonEmitter.TextureSlot);
	ModelRibbonEmitter->Data().Visibility.SetStaticScalar(RibbonEmitter.Visibility);

	ModelRibbonEmitter->Data().EmissionRate = RibbonEmitter.EmissionRate;
	ModelRibbonEmitter->Data().LifeSpan = RibbonEmitter.LifeSpan;
	ModelRibbonEmitter->Data().Gravity = RibbonEmitter.Gravity;
	ModelRibbonEmitter->Data().Rows = RibbonEmitter.Rows;
	ModelRibbonEmitter->Data().Columns = RibbonEmitter.Columns;
	ModelRibbonEmitter->Data().MaterialId = RibbonEmitter.MaterialId;

	if(!Model.AddRibbonEmitter(ModelRibbonEmitter)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a camera
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateCamera(CONST WAR3_MODEL_CAMERA& Camera)
{
	MODEL_CAMERA* ModelCamera;

	ModelCamera = new MODEL_CAMERA();
	if(ModelCamera == NULL) return FALSE;

	ModelCamera->Data().Name = Camera.Name;

	ModelCamera->Data().Source.x = Camera.Position.X;
	ModelCamera->Data().Source.y = Camera.Position.Y;
	ModelCamera->Data().Source.z = Camera.Position.Z;
	ModelCamera->Data().Target.x = Camera.TargetPosition.X;
	ModelCamera->Data().Target.y = Camera.TargetPosition.Y;
	ModelCamera->Data().Target.z = Camera.TargetPosition.Z;

	ModelCamera->Data().FieldOfView = Camera.FieldOfView;
	ModelCamera->Data().NearDistance = Camera.NearDistance;
	ModelCamera->Data().FarDistance = Camera.FarDistance;

	if(!Model.AddCamera(ModelCamera)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a geoset
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateGeoset(CONST WAR3_MODEL_GEOSET& Geoset)
{
	MODEL_GEOSET* ModelGeoset;

	ModelGeoset = new MODEL_GEOSET();
	if(ModelGeoset == NULL) return FALSE;

	ModelGeoset->Data().MaterialId = Geoset.MaterialId;
	ModelGeoset->Data().SelectionGroup = Geoset.SelectionGroup;
	ModelGeoset->Data().Unselectable = Geoset.Unselectable;

	ModelGeoset->Data().Extent.Radius = Geoset.Extent.Radius;
	ModelGeoset->Data().Extent.Min.x = Geoset.Extent.Min.X;
	ModelGeoset->Data().Extent.Min.y = Geoset.Extent.Min.Y;
	ModelGeoset->Data().Extent.Min.z = Geoset.Extent.Min.Z;
	ModelGeoset->Data().Extent.Max.x = Geoset.Extent.Max.X;
	ModelGeoset->Data().Extent.Max.y = Geoset.Extent.Max.Y;
	ModelGeoset->Data().Extent.Max.z = Geoset.Extent.Max.Z;

	if(!Model.AddGeoset(ModelGeoset)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a geoset animation
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateGeosetAnimation(CONST WAR3_MODEL_GEOSET_ANIMATION& GeosetAnimation)
{
	MODEL_GEOSET_ANIMATION* ModelGeosetAnimation;

	ModelGeosetAnimation = new MODEL_GEOSET_ANIMATION();
	if(ModelGeosetAnimation == NULL) return FALSE;

	ModelGeosetAnimation->Data().GeosetId = GeosetAnimation.GeosetId;

	ModelGeosetAnimation->Data().Color.SetStaticVector3(D3DXVECTOR3(GeosetAnimation.Color.B, GeosetAnimation.Color.G, GeosetAnimation.Color.R));
	ModelGeosetAnimation->Data().Alpha.SetStaticScalar(GeosetAnimation.Alpha);

	ModelGeosetAnimation->Data().UseColor = GeosetAnimation.UseColor;
	ModelGeosetAnimation->Data().DropShadow = GeosetAnimation.DropShadow;

	if(!Model.AddGeosetAnimation(ModelGeosetAnimation)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a global sequence
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateGlobalSequence(CONST WAR3_MODEL_GLOBAL_SEQUENCE& GlobalSequence)
{
	MODEL_GLOBAL_SEQUENCE* ModelGlobalSequence;

	ModelGlobalSequence = new MODEL_GLOBAL_SEQUENCE();
	if(ModelGlobalSequence == NULL) return FALSE;

	ModelGlobalSequence->Data().Duration = GlobalSequence.Duration;

	if(!Model.AddGlobalSequence(ModelGlobalSequence)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a material
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateMaterial(CONST WAR3_MODEL_MATERIAL& Material)
{
	MODEL_MATERIAL* ModelMaterial;

	ModelMaterial = new MODEL_MATERIAL();
	if(ModelMaterial == NULL) return FALSE;

	ModelMaterial->Data().PriorityPlane = Material.PriorityPlane;

	ModelMaterial->Data().ConstantColor = Material.ConstantColor;
	ModelMaterial->Data().SortPrimitivesFarZ = Material.SortPrimitivesFarZ;
	ModelMaterial->Data().FullResolution = Material.FullResolution;

	if(!Model.AddMaterial(ModelMaterial)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a pivot point
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreatePivotPoint(CONST WAR3_MODEL_PIVOT_POINT& PivotPoint)
{
	D3DXVECTOR3* ModelPivotPoint;

	ModelPivotPoint = new D3DXVECTOR3();
	if(ModelPivotPoint == NULL) return FALSE;

	ModelPivotPoint->x = PivotPoint.Position.X;
	ModelPivotPoint->y = PivotPoint.Position.Y;
	ModelPivotPoint->z = PivotPoint.Position.Z;

	if(!Model.AddPivotPoint(ModelPivotPoint)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a sequence
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateSequence(CONST WAR3_MODEL_SEQUENCE& Sequence)
{
	MODEL_SEQUENCE* ModelSequence;

	ModelSequence = new MODEL_SEQUENCE();
	if(ModelSequence == NULL) return FALSE;

	ModelSequence->Data().Name = Sequence.Name;

	ModelSequence->Data().Rarity = Sequence.Rarity;
	ModelSequence->Data().MoveSpeed = Sequence.MoveSpeed;
	ModelSequence->Data().NonLooping = Sequence.NonLooping;
	ModelSequence->Data().Interval.x = static_cast<FLOAT>(Sequence.IntervalStart);
	ModelSequence->Data().Interval.y = static_cast<FLOAT>(Sequence.IntervalEnd);

	ModelSequence->Data().Extent.Radius = Sequence.Extent.Radius;
	ModelSequence->Data().Extent.Min.x = Sequence.Extent.Min.X;
	ModelSequence->Data().Extent.Min.y = Sequence.Extent.Min.Y;
	ModelSequence->Data().Extent.Min.z = Sequence.Extent.Min.Z;
	ModelSequence->Data().Extent.Max.x = Sequence.Extent.Max.X;
	ModelSequence->Data().Extent.Max.y = Sequence.Extent.Max.Y;
	ModelSequence->Data().Extent.Max.z = Sequence.Extent.Max.Z;

	if(!Model.AddSequence(ModelSequence)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a texture
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateTexture(CONST WAR3_MODEL_TEXTURE& Texture)
{
	std::string FileName;
	MODEL_TEXTURE* ModelTexture;

	FileName = Texture.FileName;
	if(FileName != "")
	{
		if(FileName.substr(0, 2) == ".\\") FileName.erase(0, 2);

		if(!TextureManager.Load(FileName))
		{
			FileName = Common.GetFileName(FileName);
			if(!TextureManager.Load(FileName))
			{
				return FALSE;
			}
		}
	}

	Error.ClearMessage();

	ModelTexture = new MODEL_TEXTURE();
	if(ModelTexture == NULL) return FALSE;

	ModelTexture->Data().FileName = FileName;

	ModelTexture->Data().ReplaceableId = Texture.ReplaceableId;

	ModelTexture->Data().WrapWidth = Texture.WrapWidth;
	ModelTexture->Data().WrapHeight = Texture.WrapHeight;

	if(!Model.AddTexture(ModelTexture)) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Creates a texture animation
//+-----------------------------------------------------------------------------
BOOL MODEL_BUILDER::CreateTextureAnimation(CONST WAR3_MODEL_TEXTURE_ANIMATION& TextureAnimation)
{
	MODEL_TEXTURE_ANIMATION* ModelTextureAnimation;

	ModelTextureAnimation = new MODEL_TEXTURE_ANIMATION();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -