void GameScene::RenderTextWithDepth(Mesh* mesh, std::string text, Colour colour) { if(!mesh || mesh->textureID <= 0) { //Proper error check return; } glUniform1i(m_parameters[U_TEXT_ENABLED], 1); glUniform3fv(m_parameters[U_TEXT_COLOR], 1, &colour.r); glUniform1i(m_parameters[U_LIGHTENABLED], 0); glUniform1i(m_parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureID); glUniform1i(m_parameters[U_COLOR_TEXTURE], 0); for(unsigned i = 0; i < text.length(); ++i) { Mtx44 characterSpacing; characterSpacing.SetToTranslation(i * 1.0f, 0.0f, 0.0f); //1.0f is the spacing of each character, you may change this value Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(m_parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); mesh->Render((unsigned)text[i] * 6, 6); } glBindTexture(GL_TEXTURE_2D, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 0); }
void SceneBase::RenderText(Mesh* mesh, std::string text, Color color) { if (!mesh || mesh->textureArray[0] <= 0) return; glDisable(GL_DEPTH_TEST); glUniform1i(m_parameters[U_TEXT_ENABLED], 1); glUniform3fv(m_parameters[U_TEXT_COLOR], 1, &color.r); glUniform1i(m_parameters[U_LIGHTENABLED], 0); glUniform1i(m_parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureArray[0]); glUniform1i(m_parameters[U_COLOR_TEXTURE], 0); for (unsigned i = 0; i < text.length(); ++i) { Mtx44 characterSpacing; characterSpacing.SetToTranslation(i * 1.0f, 0, 0); //1.0f is the spacing of each character, you may change this value Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(m_parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); mesh->Render((unsigned)text[i] * 6, 6); } glBindTexture(GL_TEXTURE_2D, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 0); glEnable(GL_DEPTH_TEST); }
void GameScene::RenderTextOnScreen(Mesh* mesh, std::string text, Colour colour, float size, float x, float y) { if(!mesh || mesh->textureID <= 0) {//Proper error check return; } glDisable(GL_DEPTH_TEST); Mtx44 ortho; ortho.SetToOrtho(0, glfwGetVideoMode(glfwGetPrimaryMonitor())->width, 0, glfwGetVideoMode(glfwGetPrimaryMonitor())->height, -10, 10); //size of screen UI projectionStack.PushMatrix(); projectionStack.LoadMatrix(ortho); viewStack.PushMatrix(); viewStack.LoadIdentity(); //No need camera for ortho mode modelStack.PushMatrix(); modelStack.LoadIdentity(); //Reset modelStack modelStack.Scale(size, size, size); modelStack.Translate(x, y, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 1); glUniform3fv(m_parameters[U_TEXT_COLOR], 1, &colour.r); glUniform1i(m_parameters[U_LIGHTENABLED], 0); glUniform1i(m_parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureID); glUniform1i(m_parameters[U_COLOR_TEXTURE], 0); for(unsigned i = 0; i < text.length(); ++i) { Mtx44 characterSpacing; characterSpacing.SetToTranslation(i * 0.3f, 0, 0); //1.0f is the spacing of each character, you may change this value Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(m_parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); mesh->Render((unsigned)text[i] * 6, 6); } glBindTexture(GL_TEXTURE_2D, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 0); projectionStack.PopMatrix(); viewStack.PopMatrix(); modelStack.PopMatrix(); glEnable(GL_DEPTH_TEST); }
/******************************************************************************** Render text onto the screen ********************************************************************************/ void SceneManager::RenderTextOnScreen(Mesh* mesh, std::string text, Color color, float size, float x, float y, float rotation) { if (!mesh || mesh->textureID <= 0) return; glDisable(GL_DEPTH_TEST); Mtx44 ortho; ortho.SetToOrtho(0, double(sceneWidth), 0, double(sceneHeight), -10, 10); projectionStack.PushMatrix(); projectionStack.LoadMatrix(ortho); viewStack.PushMatrix(); viewStack.LoadIdentity(); modelStack.PushMatrix(); modelStack.LoadIdentity(); modelStack.Translate(x, y, 0); if (rotation != 0.f) { modelStack.Rotate(rotation, 0, 0, 1); } modelStack.Scale(size, size, size); glUniform1i(parameters[U_TEXT_ENABLED], 1); glUniform3fv(parameters[U_TEXT_COLOR], 1, &color.r); glUniform1i(parameters[U_LIGHTENABLED], 0); glUniform1i(parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureID); glUniform1i(parameters[U_COLOR_TEXTURE], 0); float temp = 0; for (unsigned i = 0; i < text.length(); ++i) { Mtx44 characterSpacing; characterSpacing.SetToTranslation(temp * 1.5f, 0, 0); //1.0f is the spacing of each character, you may change this value Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); temp += textWidth[text[i]] * 0.01; mesh->Render((unsigned)text[i] * 6, 6); } glBindTexture(GL_TEXTURE_2D, 0); glUniform1i(parameters[U_TEXT_ENABLED], 0); modelStack.PopMatrix(); viewStack.PopMatrix(); projectionStack.PopMatrix(); glEnable(GL_DEPTH_TEST); }
void Mtx44::SetToLookAt(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ) { Vector3 f((float)(centerX - eyeX), (float)(centerY - eyeY), (float)(centerZ - eyeZ)); f.Normalize(); Vector3 up((float)upX, (float)upY, (float)upZ); up.Normalize(); Vector3 s = f.Cross(up); Vector3 u = s.Cross(f); Mtx44 mat(s.x, u.x, -f.x, 0, s.y, u.y, -f.y, 0, s.z, u.z, -f.z, 0, 0, 0, 0, 1); Mtx44 tran; tran.SetToTranslation(-(float)eyeX, -(float)eyeY, -(float)eyeZ); *this = mat * tran; }
void SceneText::RenderTextOnScreen(Mesh* mesh, std::string text, Color color, float size, float x, float y) { if (!mesh || mesh->textureID <= 0) //Proper error check return; glDisable(GL_DEPTH_TEST); //Add these code just after glDisable(GL_DEPTH_TEST); Mtx44 ortho; ortho.SetToOrtho(0, 80, 0, 60, -10, 10); //size of screen UI projectionStack.PushMatrix(); projectionStack.LoadMatrix(ortho); viewStack.PushMatrix(); viewStack.LoadIdentity(); //No need camera for ortho mode modelStack.PushMatrix(); modelStack.LoadIdentity(); //Reset modelStack modelStack.Scale(size, size, size); modelStack.Translate(x, y, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 1); glUniform3fv(m_parameters[U_TEXT_COLOR], 1, &color.r); glUniform1i(m_parameters[U_LIGHTENABLED], 0); glUniform1i(m_parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureID); glUniform1i(m_parameters[U_COLOR_TEXTURE], 0); for (unsigned i = 0; i < text.length(); ++i) { Mtx44 characterSpacing; characterSpacing.SetToTranslation(i * 1.0f + 0.5f, 0.5f, 0); // for text on screen Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(m_parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); mesh->Render((unsigned)text[i] * 6, 6); } glBindTexture(GL_TEXTURE_2D, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 0); //Add these code just before glEnable(GL_DEPTH_TEST); projectionStack.PopMatrix(); viewStack.PopMatrix(); modelStack.PopMatrix(); glEnable(GL_DEPTH_TEST); }
void View::RenderTextOnScreen(Mesh* mesh, std::string text, Color color, float size, float x, float y) { if (mesh == NULL) return; glDisable(GL_DEPTH_TEST); Mtx44 ortho; ortho.SetToOrtho(0, (float)m_viewPort[VIEWPORT_WIDTH], 0, (float)m_viewPort[VIEWPORT_HEIGHT], -10, 10); projectionStack.PushMatrix(); projectionStack.LoadMatrix(ortho); viewStack.PushMatrix(); viewStack.LoadIdentity(); modelStack.PushMatrix(); modelStack.LoadIdentity(); modelStack.Translate(x, y, 0); modelStack.Scale(size, size, size); glUniform1i(m_parameters[U_TEXT_ENABLED], 1); glUniform3fv(m_parameters[U_TEXT_COLOR], 1, &color.r); glUniform1i(m_parameters[U_LIGHTENABLED], 0); glUniform1i(m_parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureID); glUniform1i(m_parameters[U_COLOR_TEXTURE], 0); // Alpha glUniform1f(m_parameters[U_OBJECT_ALPHA], mesh->alpha); for (unsigned i = 0; i < text.length(); ++i) { Mtx44 characterSpacing; characterSpacing.SetToTranslation((i*0.4f) + 0.5f, 0.5f, 0); //1.0f is the spacing of each character, you may change this value Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(m_parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); mesh->Render((unsigned)text[i] * 6, 6); } glBindTexture(GL_TEXTURE_2D, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 0); modelStack.PopMatrix(); viewStack.PopMatrix(); projectionStack.PopMatrix(); glEnable(GL_DEPTH_TEST); }
void CSceneManager2D::RenderTextOnScreenTrans(Mesh* mesh, std::string text, Color color, int transparency, float size, float x, float y, float z) { if (!mesh || mesh->textureID <= 0) return; glDisable(GL_DEPTH_TEST); Mtx44 ortho; //ortho.SetToOrtho(0, m_window_width, 0, m_window_height, -10, 10); ortho.SetToOrtho(0, m_window_width, 0, m_window_height, -10, 10); projectionStack.PushMatrix(); projectionStack.LoadMatrix(ortho); viewStack.PushMatrix(); viewStack.LoadIdentity(); modelStack.PushMatrix(); modelStack.LoadIdentity(); modelStack.Translate(x, y, z); modelStack.Scale(size, size, size); glUniform1i(m_parameters[U_TEXT_ENABLED], 1); glUniform1i(m_parameters[U_TEXTURE_ALPHA], transparency); glUniform3fv(m_parameters[U_TEXT_COLOR], 1, &color.r); glUniform1i(m_parameters[U_LIGHTENABLED], 0); glUniform1i(m_parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureID); glUniform1i(m_parameters[U_COLOR_TEXTURE], 0); for (unsigned i = 0; i < text.length(); ++i) { Mtx44 characterSpacing; characterSpacing.SetToTranslation((i*0.5f) + 0.5f, 0.5f, 0); //1.0f is the spacing of each character, you may change this value Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(m_parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); mesh->Render((unsigned)text[i] * 6, 6); } glBindTexture(GL_TEXTURE_2D, 0); glUniform1i(m_parameters[U_TEXT_ENABLED], 0); glUniform1i(m_parameters[U_TEXTURE_ALPHA], 0); modelStack.PopMatrix(); viewStack.PopMatrix(); projectionStack.PopMatrix(); glEnable(GL_DEPTH_TEST); }
void SceneText::RenderSprites(Mesh* mesh, const float size, const float x, const float y) { glDisable(GL_DEPTH_TEST); Mtx44 ortho; ortho.SetToOrtho(0, 1024, 0, 800, -10, 10); projectionStack.PushMatrix(); projectionStack.LoadMatrix(ortho); viewStack.PushMatrix(); viewStack.LoadIdentity(); modelStack.PushMatrix(); modelStack.LoadIdentity(); modelStack.Translate(x, y, 0); modelStack.Scale(size, size, size); //if (!mesh || mesh->textureID <= 0) // return; glUniform1i(m_parameters[U_COLOR_TEXTURE_ENABLED], 1); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, mesh->textureID); glUniform1i(m_parameters[U_COLOR_TEXTURE], 0); Mtx44 characterSpacing; characterSpacing.SetToTranslation(0.5f, 0.5f, 0); //1.0f is the spacing of each character, you may change this value Mtx44 MVP = projectionStack.Top() * viewStack.Top() * modelStack.Top() * characterSpacing; glUniformMatrix4fv(m_parameters[U_MVP], 1, GL_FALSE, &MVP.a[0]); mesh->Render((unsigned)increase * 6, 6); glBindTexture(GL_TEXTURE_2D, 0); modelStack.PopMatrix(); viewStack.PopMatrix(); projectionStack.PopMatrix(); glEnable(GL_DEPTH_TEST); }
void MS::Translate(float translateX, float translateY, float translateZ) { Mtx44 mat; mat.SetToTranslation(translateX, translateY, translateZ); ms.top() = ms.top() * mat; }
void MS::Translate(const Vector3 translate) { Mtx44 mat; mat.SetToTranslation(translate.x, translate.y, translate.z); ms.top() = ms.top() * mat; }