Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Game::Redraw()
- {
- //ustawienie textury do ktorej chcemy renderować
- rt->SetRenderTarget();
- glClearColor(0.6f, 0.5f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- //ustawienie shadera e jako aktywnego
- shaderColor->Apply();
- //ustawienie macierzy widoku i projekcji
- shaderColor->GetParameter("View")->SetValue(camera.getView());
- shaderColor->GetParameter("Projection")->SetValue(camera.getProjection());
- //ustawienie pozycji światła i camery
- shaderColor->GetParameter("LightPosition")->SetValue(LightPosition);
- shaderColor->GetParameter("EyePosition")->SetValue(camera.getPosition());
- int i = 0;
- //ustawienie koloru materiału
- shaderColor->GetParameter("matColor")->SetValue(testModel->GetMesh(i)->GetMaterial().Color);
- if(testModel->GetMesh(i)->GetMaterial().texture != NULL)
- {
- //jeśli mamy teksturę to ją bindujemy i ustawiamy tryb teskturowania w shaderze
- shaderColor->GetParameter("mode")->SetValue(1.0f);
- shaderColor->GetParameter("tex")->SetValue(*testModel->GetMesh(i)->GetMaterial().texture);
- }
- else
- {
- //włączenie trybu bez tekstury
- shaderColor->GetParameter("mode")->SetValue(-1.0f);
- }
- // ustawienie transformacji obiektu
- // model może się składać z kilku części (meshy) które znajdują się w przestrzeni lokalnej modelu,
- // musimy skorygować ich pozycję i przekształcić do przestrzeni naszego świata,
- // w tym celu wyciągamy macierz transformacji mesha testModel->GetMesh(i)->getLocalWorld(),
- // a następnie przekształcamy w podobny sposób jak w starszych wersjach OpenGL
- for(int i = 0; i < testModel->Elements(); i++) {
- shaderColor->GetParameter("World")->SetValue(
- testModel->GetMesh(i)->getLocalWorld() *
- glm::translate(glm::mat4(1.0f), glm::vec3( posX, posY - 0.5, posZ )) *
- glm::rotate(glm::mat4(1.0f), rotate, glm::vec3( 0.0f, 1.0f, 0.0f )) *
- glm::scale(glm::mat4(1.0f), glm::vec3( 0.1, 0.1, 0.1 ))
- );
- // rysowanie modelu
- testModel->GetMesh(i)->Draw();
- }
- // rysowanie sceny
- drawScene();
- // mapowanie tonow za pomoca drugiego shadera, wynik renderowany jest do drugiego render targetu (rtTMO)
- rtTMO->SetRenderTarget();
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- shaderTMO->Apply();
- shaderTMO->GetParameter("tex")->SetValue(*rt);
- shaderTMO->GetParameter("gamma")->SetValue(1.6f);
- quad->Draw(0, 0, 800, 600, shaderTMO->GetParameter("World"));
- //rendering na ekran (do framebuffera)
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- glViewport(0, 0, 800, 600);
- glClearColor(0.0, 0.0, 0.0, 0.0); //zmiana glClearColor by sprawdzić czy faktycznie wyrenderowaliśmy coś do tekstury
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- shaderTextureDrawer->Apply();
- quad->Draw(0, 0, 800, 600, shaderTextureDrawer->GetParameter("World"));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement