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

📄 bagendscene.h

📁 Ion Team Lord Of The Rings Demo 模拟指环王的3D游戏 VS.NET编译 里面提供高级渲染算法
💻 H
字号:

#define NUMBER_OF_BILBO_MOVEMENTS 30
#define NUMBER_OF_GANDALF_MOVEMENTS 15

#define BILBO_SIGH 1
#define GANDY_LAUGH 2

Md2Model beBilbo, beGandalf, beEmapRing;
BezCam beCam(0.01f,0.75f);
CSkyBox beSkyBox;
CMap beMap;
int beMusic;
int beParticleSystem;
bool beFlags[NUMBER_OF_FLAGS];

CharMovement beBilboMovement[NUMBER_OF_BILBO_MOVEMENTS]; //stores the changes to be made to bilbo's position and rotation
CharMovement beGandalfMovement[NUMBER_OF_GANDALF_MOVEMENTS]; //stores the changes to be made to Gandalf's position and rotation
float beBilboAnimationFraction, beGandalfAnimationFraction;
Uint16 beBilboMovementIndex, beGandalfMovementIndex;


void BagEndInit()
{
  beMap.Init("Data/BagEnd.cmf");
  beSkyBox.Init("Data/CSkyBox/Day","jpg");
  beBilbo.Load("Data/ModelsAndSkins/Hobbit/Hobbit.md2","Data/ModelsAndSkins/Hobbit/Bilbo.jpg");
  beBilbo.SetAnimation("Walk");
  beGandalf.Load("Data/ModelsAndSkins/Gandalf/Gandalf.md2","Data/ModelsAndSkins/Gandalf/GandalfTheGray.jpg");
  beGandalf.SetAnimation("Walk");
	beEmapRing.Load("Data/ModelsAndSkins/Ring/Ring.md2","Data/ModelsAndSkins/Ring/Ring.jpg");
  
	beCam.LoadFromFile("Data/Paths/BagEnd.path");
  
	for (int i=0;i<NUMBER_OF_FLAGS;i++)
    beFlags[i]=false;
#include "BagEndSceneBilboChanges.h"
#include "BagEndSceneGandalfChanges.h"
}


void BagEndRenderNextFrame(float Milliseconds)
{
  static bool Record=false, DrawPath=false;
  static bool started=false;
  if (!started)
    {
      started=true;
			fpvCam.StartRecord("Data\\record.path");
      LightManager.Enable(GL_LIGHT1);
      LightManager.Enable(GL_LIGHT2);
      LightManager.SetAmbientColor(GL_LIGHT1,0.7f,0.7f,0.7f,1.0f);
      LightManager.SetDiffuseColor(GL_LIGHT1,1.0f,1.0f,1.0f,1.0f);
      LightManager.SetAmbientColor(GL_LIGHT2,0.7f,0.7f,0.7f,1.0f);
      LightManager.SetDiffuseColor(GL_LIGHT2,1.0f,1.0f,0.6f,1.0f);

	  if (ParticleFraction!=0.0f)
	  {
      beParticleSystem=PGod.NewSystem(200,"Data/Particles/star.bmp", 30, false); // The Fire particle system :D
      PGod[beParticleSystem]->InitialParticle.Pos=Vector3d(-18.5f,1.0f,3.0f);
      PGod[beParticleSystem]->InitialParticle.Speed=Vector3d(0.0f,0.00005f,0.0f);
      PGod[beParticleSystem]->InitialParticle.fLifetime=250.0f;
      PGod[beParticleSystem]->InitialParticle.fInitialAlpha=1.0f;
      PGod[beParticleSystem]->InitialParticle.fFinalAlpha=0.6f;
      PGod[beParticleSystem]->InitialParticle.fInitialSize=0.3f;
      PGod[beParticleSystem]->InitialParticle.fFinalSize=0.15f;
      PGod[beParticleSystem]->InitialParticle.InitialColor.r=0.7f;
      PGod[beParticleSystem]->InitialParticle.InitialColor.g=0.3f;
      PGod[beParticleSystem]->InitialParticle.InitialColor.b=0.1f;
      PGod[beParticleSystem]->InitialParticle.FinalColor.r=0.7f;
      PGod[beParticleSystem]->InitialParticle.FinalColor.g=0.3f;
      PGod[beParticleSystem]->InitialParticle.FinalColor.b=0.1f;

      PGod[beParticleSystem]->Chaos.Pos=Vector3d(0.25f,0.05f,0.3f);
      PGod[beParticleSystem]->Chaos.Speed=Vector3d(0.0f,0.00005f,0.0f);
      PGod[beParticleSystem]->Chaos.fLifetime=150.0f;
      PGod[beParticleSystem]->Chaos.fInitialAlpha=0.0f;
      PGod[beParticleSystem]->Chaos.fFinalAlpha=0.05f;
      PGod[beParticleSystem]->Chaos.fInitialSize=0.1f;
      PGod[beParticleSystem]->Chaos.fFinalSize=0.05f;
      PGod[beParticleSystem]->Chaos.InitialColor.r=0.0f;
      PGod[beParticleSystem]->Chaos.InitialColor.g=0.0f;
      PGod[beParticleSystem]->Chaos.InitialColor.b=0.0f;
      PGod[beParticleSystem]->Chaos.FinalColor.r=0.0f;
      PGod[beParticleSystem]->Chaos.FinalColor.g=0.0f;
      PGod[beParticleSystem]->Chaos.FinalColor.b=0.0f;

      PGod[scParticleSystem]->InitialAccel=Vector3d(0.0f,0.000001f,0.0f);
      PGod[scParticleSystem]->FinalAccel=Vector3d(0.0f,0.0001f,0.0f);
	  }
    }
  PGod.Update(Milliseconds);


  // UPDATE!
  static float temptime=0.0f, TotalTime=0.0f, CamPointTime=0.0f;
  temptime+=Milliseconds;

  if (Record)
    {
      CamPointTime+=Milliseconds;
      if (CamPointTime>=2000.0f)
        {
          if (!fpvCam.Continue)
            Milliseconds=0.0f;
          else
            CamPointTime=0.0f;
          fpvCam.Continue=false;
        }
    }
  TotalTime+=Milliseconds;
 


 
  beCam.LookAtNextPoint(Milliseconds*0.05);
  beCam.PositionSkybox();
  if (TotalTime<34000.0f || TotalTime>45500.0f)
	beSkyBox.Render();
  glLoadIdentity();
  beCam.Position();
  
  LightManager.SetPosition(GL_LIGHT1,-3.0f,54.0f,-16.0f);
  LightManager.SetPosition(GL_LIGHT2,-18.5f,1.7f,3.0f);

	if (TotalTime<10000.0f)
	{
		float t=TotalTime*0.0001f;
		LightManager.SetAmbientColor(GL_LIGHT1,0.7f*t,0.7f*t,0.7f*t,1.0f);
		LightManager.SetDiffuseColor(GL_LIGHT1,1.0f*t,1.0f*t,1.0f*t,1.0f);
		LightManager.SetAmbientColor(GL_LIGHT2,0.7f*t,0.7f*t,0.7f*t,1.0f);
		LightManager.SetDiffuseColor(GL_LIGHT2,1.0f*t,1.0f*t,0.6f*t,1.0f);
	}

	if (TotalTime>34000.0f && TotalTime<39000.0f)
	{
		float t=1.0f-((TotalTime-34000.0f)*0.0003333f);
		LightManager.SetAmbientColor(GL_LIGHT1,0.7f*t,0.7f*t,0.7f*t,1.0f);
		LightManager.SetDiffuseColor(GL_LIGHT1,1.0f*t,1.0f*t,1.0f*t,1.0f);
		LightManager.SetAmbientColor(GL_LIGHT2,0.7f*t,0.7f*t,0.7f*t,1.0f);
		LightManager.SetDiffuseColor(GL_LIGHT2,1.0f*t,1.0f*t,0.6f*t,1.0f);
	}
	if (TotalTime>45000.0f && TotalTime<48000.0f)
	{
		float t=(TotalTime-44000.0f)*0.0003333f;
		LightManager.SetAmbientColor(GL_LIGHT1,0.7f*t,0.7f*t,0.7f*t,1.0f);
		LightManager.SetDiffuseColor(GL_LIGHT1,1.0f*t,1.0f*t,1.0f*t,1.0f);
		LightManager.SetAmbientColor(GL_LIGHT2,0.7f*t,0.7f*t,0.7f*t,1.0f);
		LightManager.SetDiffuseColor(GL_LIGHT2,1.0f*t,1.0f*t,0.6f*t,1.0f);
	}
	if (TotalTime>48000.0f && !scFlags[SCENDED_FADE])
	{
		scFlags[SCENDED_FADE]=true;
    LightManager.SetAmbientColor(GL_LIGHT1,0.7f,0.7f,0.7f,1.0f);
    LightManager.SetDiffuseColor(GL_LIGHT1,1.0f,1.0f,1.0f,1.0f);
		LightManager.SetAmbientColor(GL_LIGHT2,0.7f,0.7f,0.7f,1.0f);
    LightManager.SetDiffuseColor(GL_LIGHT2,1.0f,1.0f,0.6f,1.0f);
	}


  beMap.Draw();
  if (DrawPath)
    {
      beCam.DrawCurves();
      beCam.DrawPoints();
    }
  glPushMatrix();
  beBilboAnimationFraction+=Milliseconds*beBilboMovement[beBilboMovementIndex].TimeFactor;
  if (beBilboAnimationFraction>=0.99f)
    {
      beBilboMovementIndex++;
      beBilboAnimationFraction=0.0f;
      if (beBilboMovement[beBilboMovementIndex].ChangeAnimation)
        beBilbo.SetAnimation(beBilboMovement[beBilboMovementIndex].NewAnimation);
    }
  glTranslatef(	beBilboMovement[beBilboMovementIndex].Position.Coords[0],
                beBilboMovement[beBilboMovementIndex].Position.Coords[1],
                beBilboMovement[beBilboMovementIndex].Position.Coords[2]);
  glScalef(0.03f,0.03f,0.03f);
  if (!beBilboMovement[beBilboMovementIndex].RotationInterpolation)
			{
				glRotatef(beBilboMovement[beBilboMovementIndex].Rotation.Coords[0],1,0,0);
				glRotatef(beBilboMovement[beBilboMovementIndex].Rotation.Coords[1],0,1,0);
				glRotatef(beBilboMovement[beBilboMovementIndex].Rotation.Coords[2],0,0,1);
			}
			else
			{
				Vector3d t(beBilboMovement[beBilboMovementIndex].Rotation+((beBilboMovement[beBilboMovementIndex].Rotation2 - beBilboMovement[beBilboMovementIndex].Rotation)*beBilboAnimationFraction));
				glRotatef(t.Coords[0],1,0,0);
				glRotatef(t.Coords[1],0,1,0);
				glRotatef(t.Coords[2],0,0,1);
			}
  beBilbo.Animate(beBilboAnimationFraction,false);
  glPopMatrix();
  if(TotalTime>23800.0f && TotalTime<25800.0f)
	{
		glPushMatrix();
		glTranslatef(-12.35f,1.215f-((TotalTime-23800.0f)*0.0005),-7.75f);
		glScalef(0.02f,0.02f,0.02f);
		beEmapRing.DrawWithEMap(0);
		glPopMatrix();
	}

	if(TotalTime>25800.0f)
	{
		glPushMatrix();
		glTranslatef(-12.35f,0.215f,-7.75f);
		glScalef(0.02f,0.02f,0.02f);
		beEmapRing.DrawWithEMap(0);
		glPopMatrix();
	}

	if (TotalTime>34000.0f)
    {
      glPushMatrix();
      beGandalfAnimationFraction+=Milliseconds*beGandalfMovement[beGandalfMovementIndex].TimeFactor;
      if (beGandalfAnimationFraction>=0.99f)
        {
          beGandalfMovementIndex++;
          beGandalfAnimationFraction=0.0f;
          if (beGandalfMovement[beGandalfMovementIndex].ChangeAnimation)
            beGandalf.SetAnimation(beGandalfMovement[beGandalfMovementIndex].NewAnimation);
        }
      glTranslatef(	beGandalfMovement[beGandalfMovementIndex].Position.Coords[0],
                    beGandalfMovement[beGandalfMovementIndex].Position.Coords[1],
                    beGandalfMovement[beGandalfMovementIndex].Position.Coords[2]);
      glScalef(0.05f,0.05f,0.05f);
			if (!beGandalfMovement[beGandalfMovementIndex].RotationInterpolation)
			{
				glRotatef(beGandalfMovement[beGandalfMovementIndex].Rotation.Coords[0],1,0,0);
				glRotatef(beGandalfMovement[beGandalfMovementIndex].Rotation.Coords[1],0,1,0);
				glRotatef(beGandalfMovement[beGandalfMovementIndex].Rotation.Coords[2],0,0,1);
			}
			else
			{
				Vector3d t(beGandalfMovement[beGandalfMovementIndex].Rotation+((beGandalfMovement[beGandalfMovementIndex].Rotation2 - beGandalfMovement[beGandalfMovementIndex].Rotation)*beGandalfAnimationFraction));
				glRotatef(t.Coords[0],1,0,0);
				glRotatef(t.Coords[1],0,1,0);
				glRotatef(t.Coords[2],0,0,1);
			}
      if (!beGandalfMovement[beGandalfMovementIndex].TwoFrameInterpolation)
        beGandalf.Animate(beGandalfAnimationFraction,false);
      else
        beGandalf.TwoFrameInterpolate(beGandalfAnimationFraction,
                                      beGandalfMovement[beGandalfMovementIndex].Frame1,
                                      beGandalfMovement[beGandalfMovementIndex].Frame2);
      glPopMatrix();
    }

		if (TotalTime>65000 && beParticleSystem!=-1)
		{
			PGod[beParticleSystem]->Enabled=false;
			beParticleSystem=-1;
		}
	if (TotalTime>62000.0f)
	{
		Fade(1,1,1,(TotalTime-62000.0f)*0.001f);
	}

	if (TotalTime>19000.0f && TotalTime<24000.0f)
	{
		glLoadIdentity();
		glDisable(GL_LIGHTING);
		glDisable(GL_CULL_FACE);
		glDisable(GL_DEPTH_TEST);
		Standart.Display(" *Sigh*  -- Bilbo finaly had the courage",1.0f,20,40,0);
		Standart.Display("                To Give up The Ring!",1.0f,20,20,0);
		glEnable(GL_LIGHTING);
		glEnable(GL_CULL_FACE);
		glEnable(GL_DEPTH_TEST);
		
	}
	if (TotalTime>35000.0f && TotalTime<40000.0f)
	{
		glLoadIdentity();
		glDisable(GL_LIGHTING);
		glDisable(GL_CULL_FACE);
		glDisable(GL_DEPTH_TEST);
		Standart.Display(" *Hmmmm* -- Gandalf thought of using ",1.0f,20,40,0);
		Standart.Display("               The Ring to do good!",1.0f,20,20,0);
				glEnable(GL_LIGHTING);
		glEnable(GL_CULL_FACE);
		glEnable(GL_DEPTH_TEST);
		
	}

	if (TotalTime>55000.0f && TotalTime<60000.0f)
	{
		glLoadIdentity();
		glDisable(GL_LIGHTING);
		glDisable(GL_CULL_FACE);
		glDisable(GL_DEPTH_TEST);
		Standart.Display(" *HA HA HA HA HA* - Evil Corrupted Gandalf! ",1.0f,20,40,0);
				glEnable(GL_LIGHTING);
		glEnable(GL_CULL_FACE);
		glEnable(GL_DEPTH_TEST);
		
	}


  PGod.Draw();
}


void BagEndDeInit ()
{}

⌨️ 快捷键说明

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