void OpeningCutScene2::Render()
{
	// Render VBO here
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	//Set view matrix using camera settings
	viewStack.LoadIdentity();
	viewStack.Rotate(MoveCamera1, 0, 1, 0);
	viewStack.Rotate(RotateCamera, 1, 0, 0);
	viewStack.LookAt(
		camera.position.x, camera.position.y, camera.position.z,
		camera.target.x, camera.target.y, camera.target.z,
		camera.up.x, camera.up.y, camera.up.z
		);

	modelStack.LoadIdentity();

	RenderSceneStart();
	RenderTextWord();

	// Light Source 1
	if (light[0].type == Light::LIGHT_DIRECTIONAL)
	{
		Vector3 lightDir(light[0].position.x, light[0].position.y, light[0].position.z);
		Vector3 lightDirection_cameraspace = viewStack.Top() * lightDir;
		glUniform3fv(m_parameters[U_LIGHT0_POSITION], 1, &lightDirection_cameraspace.x);
	}
	else if (light[0].type == Light::LIGHT_SPOT)
	{
		Position lightPosition_cameraspace = viewStack.Top() * light[0].position;
		glUniform3fv(m_parameters[U_LIGHT0_POSITION], 1, &lightPosition_cameraspace.x);
		Vector3 spotDirection_cameraspace = viewStack.Top() * light[0].spotDirection;
		glUniform3fv(m_parameters[U_LIGHT0_SPOTDIRECTION], 1, &spotDirection_cameraspace.x);
	}
	else
	{
		Position lightPosition_cameraspace = viewStack.Top() * light[0].position;
		glUniform3fv(m_parameters[U_LIGHT0_POSITION], 1, &lightPosition_cameraspace.x);
	}
	//basic renders
	
	modelStack.PushMatrix();
	RenderModelOnScreen(meshList[GEO_QUAD], 80, 60, 5, 90, 1, 0, 0, 0.5f, 1+eyeOpening, 1, false);
	modelStack.PopMatrix();
	modelStack.PushMatrix();
	RenderModelOnScreen(meshList[GEO_QUAD], 80, 60, 5, 90, 1, 0, 0, 0.5f, -eyeOpening, 1, false);
	modelStack.PopMatrix();

	modelStack.PushMatrix();
	modelStack.Translate(0, 0, 53);
	modelStack.Rotate(180, 0, 1, 0);
	modelStack.Scale(15, 15, 15);
	RenderMesh(meshList[GEO_DEADBODY], true);
	modelStack.PopMatrix();

}
void Credits::RenderCredits()
{

	if (first)
	{
		RenderTextOnScreen(meshList[GEO_TEXT], "GAME", Color(1, 1, 1), 15, 6.6f+firstcredits, 2);
		RenderTextOnScreen(meshList[GEO_TEXT], "COMPLETED", Color(1, 1, 1), 15, 5.5f+firstcredits, 1);
	}

	if (second)
	{
		modelStack.PushMatrix();
		RenderModelOnScreen(meshList[GEO_NAME1], 70.f, 70.f, 10.f, 90, 1, 0, 0, 1.56f+secondcredits, 0.4f, 1.0f, false);
		modelStack.PopMatrix();

	}

	if (third)
	{
		modelStack.PushMatrix();
		RenderModelOnScreen(meshList[GEO_NAME2], 70.f, 70.f, 10.f, 90, 1, 0, 0, 1.56f+thirdcredits, 0.4f, 1.0f, false);
		modelStack.PopMatrix();
	}

	if (fourth)
	{
		modelStack.PushMatrix();
		RenderModelOnScreen(meshList[GEO_NAME3], 70.f, 70.f, 10.f, 90, 1, 0, 0, 1.56f+fourthcredits, 0.4f, 1.0f, false);
		modelStack.PopMatrix();
	}


	if (fifth)
	{
		modelStack.PushMatrix();
		RenderModelOnScreen(meshList[GEO_NAME4], 70.f, 70.f, 10.f, 90, 1, 0, 0, 1.56f+fifthcredits, 0.4f, 1.0f, false);
		modelStack.PopMatrix();
	}

	if (last)
	{
		modelStack.PushMatrix();
		RenderModelOnScreen(meshList[GEO_TITLE], 70.f, 15.f, 10.f, 90, 1, 0, 0, 1.7f +lastcredits, 2.f, 1.0f, false);
		modelStack.PopMatrix();

	}

}
Exemple #3
0
void Assignment3::Render()
{
	// Render VBO here
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	//Set view matrix using camera settings
	viewStack.LoadIdentity();
	viewStack.LookAt(
		camera.position.x, camera.position.y, camera.position.z,
		camera.target.x, camera.target.y, camera.target.z,
		camera.up.x, camera.up.y, camera.up.z
		);

	modelStack.LoadIdentity();

	if (light[0].type == Light::LIGHT_DIRECTIONAL)
	{
		Vector3 lightDir(light[0].position.x, light[0].position.y, light[0].position.z);
		Vector3 lightDirection_cameraspace = viewStack.Top() * lightDir;
		glUniform3fv(m_parameters[U_LIGHT0_POSITION], 1, &lightDirection_cameraspace.x);
	}
	else if (light[0].type == Light::LIGHT_SPOT)
	{
		Position lightPosition_cameraspace = viewStack.Top() * light[0].position;
		glUniform3fv(m_parameters[U_LIGHT0_POSITION], 1, &lightPosition_cameraspace.x);
		Vector3 spotDirection_cameraspace = viewStack.Top() * light[0].spotDirection;
		glUniform3fv(m_parameters[U_LIGHT0_SPOTDIRECTION], 1, &spotDirection_cameraspace.x);
	}
	else
	{
		Position lightPosition_cameraspace = viewStack.Top() * light[0].position;
		glUniform3fv(m_parameters[U_LIGHT0_POSITION], 1, &lightPosition_cameraspace.x);
	}


	if (light[1].type == Light::LIGHT_DIRECTIONAL)
	{
		Vector3 lightDir(light[1].position.x, light[1].position.y, light[1].position.z);
		Vector3 lightDirection_cameraspace = viewStack.Top() * lightDir;
		glUniform3fv(m_parameters[U_LIGHT1_POSITION], 1, &lightDirection_cameraspace.x);
	}
	else if (light[1].type == Light::LIGHT_SPOT)
	{
		Position lightPosition_cameraspace = viewStack.Top() * light[1].position;
		glUniform3fv(m_parameters[U_LIGHT1_POSITION], 1, &lightPosition_cameraspace.x);
		Vector3 spotDirection_cameraspace = viewStack.Top() * light[1].spotDirection;
		glUniform3fv(m_parameters[U_LIGHT1_SPOTDIRECTION], 1, &spotDirection_cameraspace.x);
	}
	else
	{
		Position lightPosition_cameraspace = viewStack.Top() * light[0].position;
		glUniform3fv(m_parameters[U_LIGHT1_POSITION], 1, &lightPosition_cameraspace.x);
	}
	//skybox
	RenderSkybox();

	//axes
	//RenderMesh(meshList[GEO_AXES], false);

	//floor
	modelStack.PushMatrix();
	modelStack.Translate(0, -1, 0);
	modelStack.Scale(100, 1, 100);
	RenderMesh(meshList[GEO_QUAD], true);
	modelStack.PopMatrix();

	//SHIP
	modelStack.PushMatrix();
	modelStack.Translate(SHIP.x,SHIP.y,SHIP.z);
	modelStack.Rotate(4, 0, 0, 1);
	modelStack.Translate(0, -1, 0);
	RenderMesh(meshList[GEO_MODEL1], true);
	modelStack.PopMatrix();
	
	//FLAG
	modelStack.PushMatrix();
	modelStack.Translate(FLAG.x,FLAG.y,FLAG.z);
	modelStack.Rotate(-flagRotate, 0, 0, 1);
	modelStack.Rotate(90, 0, 1, 0);
	RenderMesh(meshList[GEO_MODEL2], true);
	modelStack.PopMatrix();

	//CRATERS;
	for (int i = 0; i < 3; ++i)
	{
		if (i == 0)
		{
			modelStack.PushMatrix();
			modelStack.Translate(0, -0.5, 0);
			modelStack.Scale(2, 2, 2);
			RenderMesh(meshList[GEO_CRATER], true);
			modelStack.PopMatrix();
		}
		else if (i == 1)
		{
			modelStack.PushMatrix();
			modelStack.Translate(30, -0.5, 5);
			modelStack.Scale(3, 2, 3);
			RenderMesh(meshList[GEO_CRATER], true);
			modelStack.PopMatrix();
		}
		else
		{
			for (int j = 0; j < 2; ++j)
			{
				modelStack.PushMatrix();
				modelStack.Translate(-20, -0.5, 10 - j*20);
				modelStack.Scale(3, 2, 3);
				RenderMesh(meshList[GEO_CRATER], true);
				modelStack.PopMatrix();
			}
		}
	}

	// ROCKS AT PERIMETER
	for (int i = 0; i < 2; ++i)
	{
		for (int j = 0; j < 11; ++j)
		{
			modelStack.PushMatrix();
			modelStack.Translate(-50 + j * 10, 1, -50 + 100*i);
			modelStack.Scale(10, 5, 10);
			RenderMesh(meshList[GEO_BOULDER], true);
			modelStack.PopMatrix();
		}
	}
	for (int i = 0; i < 2; ++i)
	{
		for (int j = 0; j < 11; ++j)
		{
			modelStack.PushMatrix();
			modelStack.Translate(-50 + i*100, 1, -50 + j * 10);
			modelStack.Scale(10, 5, 10);
			RenderMesh(meshList[GEO_BOULDER], true);
			modelStack.PopMatrix();
		}
	}

	//MOONBASE
	
	for (int j = 0; j < 3; ++j)
	{
		for (int i = -1; i < j; ++i)
		{
			modelStack.PushMatrix();
			modelStack.Translate(3 - i*10, -0.9, -25 - 7 * j);
			modelStack.Rotate(-135 + j*45 - i*45, 0, 1, 0);
			modelStack.Scale(1 + j*0.5, 1 + j*0.5, 1 + j*0.5);
			RenderMesh(meshList[GEO_TENT], true);
			modelStack.PopMatrix();
		}
	}
	modelStack.PushMatrix();
	modelStack.Translate(5, 0, -20);
	modelStack.PushMatrix();
	modelStack.Translate(4, 0, -0.5);
	modelStack.Scale(10, 2, 1);
	RenderMesh(meshList[GEO_SIGN], true);
	modelStack.PopMatrix();
	RenderText(meshList[GEO_TEXT], "MOON BASE", Color(1, 1, 0));
	modelStack.PopMatrix();

	// HELMET

	modelStack.PushMatrix();
	RenderModelOnScreen(meshList[GEO_HELMET], true, 120, 0.35, 0.2 + helmetY + helmetUP);
	RenderTextOnScreen(meshList[GEO_TEXT], framerate.str(), Color(0, 1, 1), 3, 1, 1 + helmetY * 40 + helmetUP * 40);
	RenderTextOnScreen(meshList[GEO_TEXT], "Push F to take off helmet", Color(0, 1, 1), 3, 1, 18.5 + helmetY * 40 + helmetUP * 40);
	if (displayMore == false)
	{
		RenderTextOnScreen(meshList[GEO_TEXT], "(Press 'U' to see more info)", Color(0, 1, 1), 2.5, 1, 20.5 + helmetY * 48 + helmetUP * 48);
	}
	else
	{
		RenderTextOnScreen(meshList[GEO_TEXT], "UI only available with helmet on", Color(0, 1, 1), 2, 1, 20.5 + helmetY * 60 + helmetUP * 60);
		RenderTextOnScreen(meshList[GEO_TEXT], "Some things can only be seen without the helmet", Color(1, 0, 0), 2, 1, 18.5 + helmetY * 60 + helmetUP * 60);
		RenderTextOnScreen(meshList[GEO_TEXT], "The flag may be scaring extraterrestial life!", Color(0, 1, 0), 2, 1, 16.5 + helmetY * 60 + helmetUP * 60);
		RenderTextOnScreen(meshList[GEO_TEXT], "Press 'R' to reset", Color(0, 1, 1), 2, 1, 14.5 + helmetY * 60 + helmetUP * 60);
	}
	RenderTextOnScreen(meshList[GEO_TEXT], "PD ENTERTAINMENT INC.", Color(0, 1, 0), 2, 1, -15 + helmetY * 60 + helmetUP * 60);
	if (camera.position.x > SHIP.x - 6.f && camera.position.x < SHIP.x + 6.f
		&& camera.position.z > SHIP.z - 6.f && camera.position.z < SHIP.z + 6.f
		&& shipFlew == false)
	{
		RenderTextOnScreen(meshList[GEO_TEXT], "Press 'E'", Color(0, 1, 0), shipNotiSize, 3, 5 + helmetY * 20 + helmetUP * 20);
	}

	framerate.str("");
	modelStack.PopMatrix();

	//ALIEN

	for (int j = 0; j < 6; ++j)
	{
		for (int i = -1 - j; i < 2 + j; ++i)
		{
			modelStack.PushMatrix();
			modelStack.Translate(i* -3, alienY, 5 + j * 5);
			modelStack.Rotate(0, 0, 0, 1);
			RenderAlien();
			modelStack.PopMatrix();
		}
	}
	
}