Advertisement
kator

Rysowanie_podstawy_Opengl

Mar 21st, 2017
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.48 KB | None | 0 0
  1. /*
  2. Niniejszy program jest wolnym oprogramowaniem; możesz go
  3. rozprowadzać dalej i / lub modyfikować na warunkach Powszechnej
  4. Licencji Publicznej GNU, wydanej przez Fundację Wolnego
  5. Oprogramowania - według wersji 2 tej Licencji lub(według twojego
  6. wyboru) którejś z późniejszych wersji.
  7.  
  8. Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on
  9. użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej
  10. gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH
  11. ZASTOSOWAŃ.W celu uzyskania bliższych informacji sięgnij do
  12. Powszechnej Licencji Publicznej GNU.
  13.  
  14. Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz
  15. Powszechnej Licencji Publicznej GNU(GNU General Public License);
  16. jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple
  17. Place, Fifth Floor, Boston, MA  02110 - 1301  USA
  18. */
  19.  
  20. #define GLM_FORCE_RADIANS
  21.  
  22. #include <GL/glew.h>
  23. #include <GLFW/glfw3.h>
  24. #include <glm/glm.hpp>
  25. #include <glm/gtc/type_ptr.hpp>
  26. #include <glm/gtc/matrix_transform.hpp>
  27. #include <stdlib.h>
  28. #include <stdio.h>
  29. #include "constants.h"
  30. #include "allmodels.h"
  31.  
  32. using namespace glm;
  33.  
  34. double r,g,b;
  35. float speed=3.14f;
  36.  
  37.  
  38.  
  39. //Procedura obsługi błędów
  40. void error_callback(int error, const char* description) {
  41.     fputs(description, stderr);
  42. }
  43.  
  44. //Procedura inicjująca
  45. void initOpenGLProgram() {
  46.     //************Tutaj umieszczaj kod, który należy wykonać raz, na początku programu************
  47.     r = g = b = 0;
  48.     glEnable(GL_LIGHTING);
  49.     glEnable(GL_LIGHT0);
  50.     glEnable(GL_DEPTH_TEST);
  51.     glEnable(GL_COLOR_MATERIAL);
  52. }
  53.  
  54. //Procedura rysująca zawartość sceny
  55. void drawScene(GLFWwindow* window,float angle) {
  56.     //************Tutaj umieszczaj kod rysujący obraz******************l
  57.     glClearColor(r,g,b,0);
  58.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  59.    
  60.     glm::mat4 M=glm::mat4(1.0f);
  61.     M = glm::rotate(M,angle,glm::vec3(1.0f,0.0f,1.0f));
  62.    
  63.     glm::mat4 P=glm::perspective(50.0f*PI/180.0f, 1.0f, 1.0f, 50.0f);
  64.    
  65.     glm::mat4 V=glm::lookAt(
  66.     glm::vec3(0.0f,0.0f,-5.0f),
  67.     glm::vec3(0.0f,0.0f,0.0f),
  68.     glm::vec3(0.0f,1.0f,0.0f));
  69.    
  70.     glMatrixMode(GL_PROJECTION);
  71.     glLoadMatrixf(glm::value_ptr(P));
  72.     glMatrixMode(GL_MODELVIEW);
  73.     glLoadMatrixf(glm::value_ptr(V*M));
  74.    
  75.     glColor3d(1-r,1-g,1-b);
  76.     Models::torus.drawSolid();
  77.     Models::cube.drawWire();
  78.     //Models::Sphere mySphere(2,36,36);
  79.     //mySphere.drawWire();
  80.     //Models::cube.drawSolid();
  81.     glfwSwapBuffers(window);
  82.    
  83. }
  84.  
  85. int main(void){
  86.     float angle = 0;
  87.    
  88.     GLFWwindow* window; //Wskaźnik na obiekt reprezentujący okno
  89.  
  90.     glfwSetErrorCallback(error_callback);//Zarejestruj procedurę obsługi błędów
  91.  
  92.     if (!glfwInit()) { //Zainicjuj bibliotekę GLFW
  93.         fprintf(stderr, "Nie można zainicjować GLFW.\n");
  94.         exit(EXIT_FAILURE);
  95.     }
  96.  
  97.     window = glfwCreateWindow(500, 500, "OpenGL by Kator", NULL, NULL);  //Utwórz okno 500x500 o tytule "OpenGL" i kontekst OpenGL.
  98.  
  99.     if (!window) //Jeżeli okna nie udało się utworzyć, to zamknij program
  100.     {
  101.         glfwTerminate();
  102.         exit(EXIT_FAILURE);
  103.     }
  104.  
  105.     glfwMakeContextCurrent(window); //Od tego momentu kontekst okna staje się aktywny i polecenia OpenGL będą dotyczyć właśnie jego.
  106.     glfwSwapInterval(1); //Czekaj na 1 powrót plamki przed pokazaniem ukrytego bufora
  107.  
  108.     GLenum err;
  109.     if ((err=glewInit()) != GLEW_OK) { //Zainicjuj bibliotekę GLEW    
  110.         fprintf(stderr, "Nie można zainicjować GLEW: %s\n", glewGetErrorString(err));
  111.         exit(EXIT_FAILURE);
  112.     }
  113.  
  114.     initOpenGLProgram(); //Operacje inicjujące
  115.         bool t =true;
  116.         glfwSetTime(0);
  117.     //Główna pętla
  118.     while (!glfwWindowShouldClose(window)) //Tak długo jak okno nie powinno zostać zamknięte
  119.     {  
  120.             if(t){
  121.                 if(0.5 > g)g = g+0.01;
  122.                 else if(0.8 > b) b = b+0.01;
  123.                 else if(0.7 > r) r = r+0.01;
  124.                 else t = false;
  125.             }
  126.             else{
  127.                 if(0.2 < b)b = b-0.01;
  128.                 else if(0.1 < r) r = r-0.01;
  129.                 else if(0.1 < g) g = g-0.01;
  130.                 else t = true;
  131.             }
  132.             angle += speed*glfwGetTime();
  133.             glfwSetTime(0);
  134.            
  135.         drawScene(window,angle); //Wykonaj procedurę rysującą
  136.         glfwPollEvents(); //Wykonaj procedury callback w zalezności od zdarzeń jakie zaszły.
  137.     }
  138.  
  139.     glfwDestroyWindow(window); //Usuń kontekst OpenGL i okno
  140.     glfwTerminate(); //Zwolnij zasoby zajęte przez GLFW
  141.     exit(EXIT_SUCCESS);
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement