Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Niniejszy program jest wolnym oprogramowaniem; możesz go
- rozprowadzać dalej i / lub modyfikować na warunkach Powszechnej
- Licencji Publicznej GNU, wydanej przez Fundację Wolnego
- Oprogramowania - według wersji 2 tej Licencji lub(według twojego
- wyboru) którejś z późniejszych wersji.
- Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on
- użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej
- gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH
- ZASTOSOWAŃ.W celu uzyskania bliższych informacji sięgnij do
- Powszechnej Licencji Publicznej GNU.
- Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz
- Powszechnej Licencji Publicznej GNU(GNU General Public License);
- jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple
- Place, Fifth Floor, Boston, MA 02110 - 1301 USA
- */
- #define GLM_FORCE_RADIANS
- #include <GL/glew.h>
- #include <GLFW/glfw3.h>
- #include <glm/glm.hpp>
- #include <glm/gtc/type_ptr.hpp>
- #include <glm/gtc/matrix_transform.hpp>
- #include <stdlib.h>
- #include <stdio.h>
- #include "constants.h"
- #include "allmodels.h"
- using namespace glm;
- double r,g,b;
- float speed=3.14f;
- //Procedura obsługi błędów
- void error_callback(int error, const char* description) {
- fputs(description, stderr);
- }
- //Procedura inicjująca
- void initOpenGLProgram() {
- //************Tutaj umieszczaj kod, który należy wykonać raz, na początku programu************
- r = g = b = 0;
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_COLOR_MATERIAL);
- }
- //Procedura rysująca zawartość sceny
- void drawScene(GLFWwindow* window,float angle) {
- //************Tutaj umieszczaj kod rysujący obraz******************l
- glClearColor(r,g,b,0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glm::mat4 M=glm::mat4(1.0f);
- M = glm::rotate(M,angle,glm::vec3(1.0f,0.0f,1.0f));
- glm::mat4 P=glm::perspective(50.0f*PI/180.0f, 1.0f, 1.0f, 50.0f);
- glm::mat4 V=glm::lookAt(
- glm::vec3(0.0f,0.0f,-5.0f),
- glm::vec3(0.0f,0.0f,0.0f),
- glm::vec3(0.0f,1.0f,0.0f));
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(glm::value_ptr(P));
- glMatrixMode(GL_MODELVIEW);
- glLoadMatrixf(glm::value_ptr(V*M));
- glColor3d(1-r,1-g,1-b);
- Models::torus.drawSolid();
- Models::cube.drawWire();
- //Models::Sphere mySphere(2,36,36);
- //mySphere.drawWire();
- //Models::cube.drawSolid();
- glfwSwapBuffers(window);
- }
- int main(void){
- float angle = 0;
- GLFWwindow* window; //Wskaźnik na obiekt reprezentujący okno
- glfwSetErrorCallback(error_callback);//Zarejestruj procedurę obsługi błędów
- if (!glfwInit()) { //Zainicjuj bibliotekę GLFW
- fprintf(stderr, "Nie można zainicjować GLFW.\n");
- exit(EXIT_FAILURE);
- }
- window = glfwCreateWindow(500, 500, "OpenGL by Kator", NULL, NULL); //Utwórz okno 500x500 o tytule "OpenGL" i kontekst OpenGL.
- if (!window) //Jeżeli okna nie udało się utworzyć, to zamknij program
- {
- glfwTerminate();
- exit(EXIT_FAILURE);
- }
- glfwMakeContextCurrent(window); //Od tego momentu kontekst okna staje się aktywny i polecenia OpenGL będą dotyczyć właśnie jego.
- glfwSwapInterval(1); //Czekaj na 1 powrót plamki przed pokazaniem ukrytego bufora
- GLenum err;
- if ((err=glewInit()) != GLEW_OK) { //Zainicjuj bibliotekę GLEW
- fprintf(stderr, "Nie można zainicjować GLEW: %s\n", glewGetErrorString(err));
- exit(EXIT_FAILURE);
- }
- initOpenGLProgram(); //Operacje inicjujące
- bool t =true;
- glfwSetTime(0);
- //Główna pętla
- while (!glfwWindowShouldClose(window)) //Tak długo jak okno nie powinno zostać zamknięte
- {
- if(t){
- if(0.5 > g)g = g+0.01;
- else if(0.8 > b) b = b+0.01;
- else if(0.7 > r) r = r+0.01;
- else t = false;
- }
- else{
- if(0.2 < b)b = b-0.01;
- else if(0.1 < r) r = r-0.01;
- else if(0.1 < g) g = g-0.01;
- else t = true;
- }
- angle += speed*glfwGetTime();
- glfwSetTime(0);
- drawScene(window,angle); //Wykonaj procedurę rysującą
- glfwPollEvents(); //Wykonaj procedury callback w zalezności od zdarzeń jakie zaszły.
- }
- glfwDestroyWindow(window); //Usuń kontekst OpenGL i okno
- glfwTerminate(); //Zwolnij zasoby zajęte przez GLFW
- exit(EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement