Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. void Game::Redraw()
  2. {
  3. //ustawienie textury do ktorej chcemy renderować
  4. rt->SetRenderTarget();
  5. glClearColor(0.6f, 0.5f, 1.0f, 1.0f);
  6. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  7.  
  8. //ustawienie shadera e jako aktywnego
  9. shaderColor->Apply();
  10. //ustawienie macierzy widoku i projekcji
  11. shaderColor->GetParameter("View")->SetValue(camera.getView());
  12. shaderColor->GetParameter("Projection")->SetValue(camera.getProjection());
  13. //ustawienie pozycji światła i camery
  14. shaderColor->GetParameter("LightPosition")->SetValue(LightPosition);
  15. shaderColor->GetParameter("EyePosition")->SetValue(camera.getPosition());
  16.  
  17. int i = 0;
  18.  
  19. //ustawienie koloru materiału
  20. shaderColor->GetParameter("matColor")->SetValue(testModel->GetMesh(i)->GetMaterial().Color);
  21.  
  22. if(testModel->GetMesh(i)->GetMaterial().texture != NULL)
  23. {
  24. //jeśli mamy teksturę to ją bindujemy i ustawiamy tryb teskturowania w shaderze
  25. shaderColor->GetParameter("mode")->SetValue(1.0f);
  26. shaderColor->GetParameter("tex")->SetValue(*testModel->GetMesh(i)->GetMaterial().texture);
  27. }
  28. else
  29. {
  30. //włączenie trybu bez tekstury
  31. shaderColor->GetParameter("mode")->SetValue(-1.0f);
  32. }
  33.  
  34. // ustawienie transformacji obiektu
  35. // model może się składać z kilku części (meshy) które znajdują się w przestrzeni lokalnej modelu,
  36. // musimy skorygować ich pozycję i przekształcić do przestrzeni naszego świata,
  37. // w tym celu wyciągamy macierz transformacji mesha testModel->GetMesh(i)->getLocalWorld(),
  38. // a następnie przekształcamy w podobny sposób jak w starszych wersjach OpenGL
  39.  
  40. for(int i = 0; i < testModel->Elements(); i++) {
  41.  
  42. shaderColor->GetParameter("World")->SetValue(
  43.  
  44. testModel->GetMesh(i)->getLocalWorld() *
  45. glm::translate(glm::mat4(1.0f), glm::vec3( posX, posY - 0.5, posZ )) *
  46. glm::rotate(glm::mat4(1.0f), rotate, glm::vec3( 0.0f, 1.0f, 0.0f )) *
  47. glm::scale(glm::mat4(1.0f), glm::vec3( 0.1, 0.1, 0.1 ))
  48. );
  49.  
  50. // rysowanie modelu
  51. testModel->GetMesh(i)->Draw();
  52. }
  53.  
  54. // rysowanie sceny
  55. drawScene();
  56.  
  57.  
  58. // mapowanie tonow za pomoca drugiego shadera, wynik renderowany jest do drugiego render targetu (rtTMO)
  59. rtTMO->SetRenderTarget();
  60. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  61. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  62. shaderTMO->Apply();
  63. shaderTMO->GetParameter("tex")->SetValue(*rt);
  64. shaderTMO->GetParameter("gamma")->SetValue(1.6f);
  65. quad->Draw(0, 0, 800, 600, shaderTMO->GetParameter("World"));
  66.  
  67. //rendering na ekran (do framebuffera)
  68. glBindFramebuffer(GL_FRAMEBUFFER, 0);
  69. glViewport(0, 0, 800, 600);
  70. glClearColor(0.0, 0.0, 0.0, 0.0); //zmiana glClearColor by sprawdzić czy faktycznie wyrenderowaliśmy coś do tekstury
  71. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  72. shaderTextureDrawer->Apply();
  73. quad->Draw(0, 0, 800, 600, shaderTextureDrawer->GetParameter("World"));
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement