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(); } }
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(); } } }