Exemplo n.º 1
0
bool SceneOpenGL::initGL()
{
    	#ifdef WIN32
        // On initialise GLEW
        GLenum initialisationGLEW(glewInit());
        // Si l'initialisation a échoué :
        if(initialisationGLEW != GLEW_OK)
        {
            // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
            std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;

            // On quitte la SDL
            SDL_GL_DeleteContext(m_contexteOpenGL);
            SDL_DestroyWindow(m_fenetre);
            SDL_Quit();

            return false;
        }
	    #endif
        // Tout s'est bien passé, on retourne true
	    return true;
}
Exemplo n.º 2
0
int main(int argc, char **argv)
{

    sf::ContextSettings settings;
    settings.depthBits = 24;
    settings.stencilBits = 8;
    settings.antialiasingLevel = 4;
    settings.majorVersion = 3.3;
    settings.minorVersion = 3.3;
    sf::RenderWindow window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, settings);
    window.setVerticalSyncEnabled(true);
    sf::Event event;

    glewExperimental=true;
    GLenum initialisationGLEW( glewInit() );
    if(initialisationGLEW != GLEW_OK)
    {
        // On affiche l'erreur grla fonction : glewGetErrorString(GLenum code)
        std::cout << "Glew Initialisation Error : " << glewGetErrorString(initialisationGLEW) << std::endl;
    }
    else
        std::cout << "Glew Initialisation Successful" << std::endl;

    glm::mat4 view;
    glm::mat4 projection;
    projection = glm::perspective(70.0, (double) 800 / 600, 0.1, 1000.0);
    //std::cout << glGetString(GL_VERSION) << std::endl;
    /*

        //*/
    Core::Shader shader("Shaders/texture.vert", "Shaders/texture.frag");
    Core::Camera camera(&window, glm::vec3(3, 3, 3), glm::vec3(0, 0, 0), glm::vec3(0, 0, 1), 0.01, 0.5);
    Textureloader textload("images/");

    Model test("test" ,"SFML.png", &textload, shader);
    Model test_1("ground", "SFML.png", &textload, shader);
    //shaderBasique.charger();
    int translate = 0b0;
    window.setPosition(sf::Vector2i((sf::VideoMode::getDesktopMode().width/2)-400,(sf::VideoMode::getDesktopMode().height/2)-300));
    sf::Mouse::setPosition(sf::Vector2i(400,300) , window);
    bool a(true);
    //glUseProgram(shaderBasique.getProgramID());
    sf::Mouse::setPosition(sf::Vector2i(window.getSize().x/2, window.getSize().y/2), window);
    while(window.isOpen())
    {
        glEnable(GL_TEXTURE_2D);
        glEnable(GL_DEPTH_TEST);
        if(a && sf::Mouse::getPosition(window).x != 400)
        {
            a = false;
            sf::Mouse::setPosition(sf::Vector2i(400,300) , window);
        }
        while(window.pollEvent(event))
        {
            switch(event.type)
            {
                case sf::Event::KeyPressed:
                    switch(event.key.code)
                    {
                        case sf::Keyboard::Escape:
                            window.close();
                            break;
                        case sf::Keyboard::Z:
                            translate += 0b1;
                            break;
                        case sf::Keyboard::S:
                            translate += 0b10;
                            break;
                        case sf::Keyboard::Q:
                            translate += 0b100;
                            break;
                        case sf::Keyboard::D:
                            translate += 0b1000;
                            break;
                        case sf::Keyboard::P:
                            sf::Mouse::setPosition(sf::Vector2i(400, 300), window);
                            break;
                        default:
                            break;
                    }
                    break;
                case sf::Event::KeyReleased:
                    switch(event.key.code)
                    {
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
        }
        if(window.isOpen())
        {
            glClearColor(0.0f, 0.6f, 1.0f, 1.0f);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            view = camera.update(sf::Vector2f(window.getSize().x/2, window.getSize().y/2));
            translate = 0b0;
            //sf::Mouse::setPosition(sf::Vector2i(400,300) , window);
            //glUseProgram(shader.getProgramID());
                test.update(projection, view);
                test_1.update(projection, view);
            glUseProgram(0);
            window.display();
        }
    }
    /**/
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_TEXTURE_2D);
    //*/
	glDeleteProgram(shader.getProgramID());
    return 0;
}
Exemplo n.º 3
0
int main(int argc, char **argv)
{	
  // Notre fenêtre
	
  SDL_Window* fenetre(0);
  SDL_GLContext contexteOpenGL(0);
	
  SDL_Event event;
  bool done(false);
	
	
  // Initialisation de la SDL
	
  if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_HAPTIC) < 0)
  {
    std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
    SDL_Quit();
		
    return -1;
  }

  IMG_Init(IMG_INIT_JPG | IMG_INIT_PNG);
	
	
  // Version d'OpenGL
	
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
	
	
  // Double Buffer
	
  SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
	SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
	
  // Création de la fenêtre

  fenetre = SDL_CreateWindow(
    "NGEngine - 01Basic", 
    SDL_WINDOWPOS_CENTERED, 
    SDL_WINDOWPOS_CENTERED, 
    800, 600, 
    SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL
  );

  if(fenetre == 0) {
    std::cout << "Erreur lors de la creation de la fenetre : " << SDL_GetError() << std::endl;
    SDL_Quit();

    return -1;
  }


  // Création du contexte OpenGL

  contexteOpenGL = SDL_GL_CreateContext(fenetre);

  if(contexteOpenGL == 0)
  {
    std::cout << SDL_GetError() << std::endl;
    SDL_DestroyWindow(fenetre);
    SDL_Quit();
    return -1;
  }

  // On initialise GLEW
  GLenum initialisationGLEW( glewInit() );

  // Si l'initialisation a échouée :
  if(initialisationGLEW != GLEW_OK)
  {
    // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)

    std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;


    // On quitte la SDL

    SDL_GL_DeleteContext(contexteOpenGL);
    SDL_DestroyWindow(fenetre);
    SDL_Quit();

    return -1;
  }

  glClearColor(0.3, 0.3, 0.5, 1.);

  // Vertices et coordonnées

//  float vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};

  // Création de la subscene

  nge::scene::Scene scene;
  nge::scene::SubScene *subscene = new nge::scene::SubScene(600, 800, 600, 0, 0);

  scene.add(subscene);

  Sint32 vertices[] = {
    0, 0,
    160, 0,
    0, 160,
    160, 160,
  };

  Uint8 colors[] = {
    255, 0, 0, 255, 
    0, 255, 255, 255,
    0, 255, 0, 255,
    0, 0, 255, 255
  };

  double texcoords[] {
    0., 0.,
    1., 0.,
    0., 1.,
    1., 1.
  };

  nge::texture::Texture *tex = NGE_SDL_Texture_Load("nge.png");
  nge::video::D2::entity::Basic 
    e1(4, 1, GL_TRIANGLE_STRIP), 
    e2(4, 1, GL_TRIANGLE_STRIP), 
    e3(4, 1, GL_TRIANGLE_STRIP), 
    e4(4, 1, GL_TRIANGLE_STRIP);

  nge::video::shader::Shader *shaders[3];

  shaders[0] = new nge::video::shader::Shader();
  if(!shaders[0]->load_files("Shaders/vertex2.vert", "Shaders/vertex2.frag"))
    printf("fichiers des shaders non trouvés.\n");

  shaders[1] = new nge::video::shader::Shader();
  if(!shaders[1]->load_files("Shaders/vertex2color4.vert", "Shaders/vertex2color4.frag"))
    printf("fichiers des shaders non trouvés.\n");

  shaders[2] = new nge::video::shader::Shader();
  if(!shaders[2]->load_files("Shaders/vertex2color4tex2.vert", "Shaders/vertex2color4tex2.frag"))
    printf("fichiers des shaders non trouvés.\n");

  if(!shaders[0]->compile())
    printf("shaders not compiled\n");
  else 
    printf("shaders compiled\n");

  if(!shaders[1]->compile())
    printf("shaders not compiled\n");
  else 
    printf("shaders compiled\n");

  if(!shaders[2]->compile())
    printf("shaders not compiled\n");
  else 
    printf("shaders compiled\n");

  shaders[0]->set_matrix(&subscene->_projection, &subscene->_modelview);
  shaders[1]->set_matrix(&subscene->_projection, &subscene->_modelview);
  shaders[2]->set_matrix(&subscene->_projection, &subscene->_modelview);

  e1.setVertexBuf(vertices, false);  // (x, y) couples
  e1._shader = shaders[0];

  e2.setVertexBuf(vertices, false);  // (x, y) couples
  e2.setColorBuf(colors, false);
  e2._shader = shaders[1];
  *(e2.getPosition()) = glm::vec2(165, 0);

  e3.setVertexBuf(vertices, false);  // (x, y) couples
  e3.setColorBuf(colors, false);
  e3.setTexCoords(texcoords, false);
  e3.setTexture(tex, true); // free the texture
  e3._shader = shaders[2];
  *(e3.getPosition()) = glm::vec2(330, 0);

  e4.setVertexBuf(vertices, false);  // (x, y) couples
  e4.setColorBuf(colors, false);
  e4.setTexCoords(texcoords, false);
  e4.setTexture(tex, false); // don't free the texture
  e4._shader = shaders[2];
  *(e4.getPosition()) = glm::vec2(0, 170);

  subscene->add(&e1);
  subscene->add(&e2);
  subscene->add(&e3);
  subscene->add(&e4);

  char down;
  
  nge::video::D2::Camera *cam;
  cam = subscene->getCamera2D();

  bool t[6] = {0};

  // Boucle principale
  while(!done)
  {
    while(SDL_PollEvent(&event)) {

      switch(event.type) {
        
        case SDL_QUIT:
          done = 1;
          break;

        case SDL_KEYDOWN:
          switch (event.key.keysym.sym) {
            case SDLK_ESCAPE:
              done = 1;
              break;
            case SDLK_LEFT:
              t[0] = 1;
              break;
            case SDLK_RIGHT:
              t[1] = 1;
              break;
            case SDLK_UP:
              t[2] = 1;
              break;
            case SDLK_DOWN:
              t[3] = 1;
              break;
            case SDLK_z:
              t[4] = 1;
              break;
            case SDLK_s:
              t[5] = 1;
              break;
            default:
              break;
          }
          break;
        case SDL_KEYUP:
          switch (event.key.keysym.sym) {
            case SDLK_LEFT:
              t[0] = 0;
              break;
            case SDLK_RIGHT:
              t[1] = 0;
              break;
            case SDLK_UP:
              t[2] = 0;
              break;
            case SDLK_DOWN:
              t[3] = 0;
              break;
            case SDLK_z:
              t[4] = 0;
              break;
            case SDLK_s:
              t[5] = 0;
              break;
            default:
              break;
          }
          break;
        default:
          break;
      }
    }

#define NB 5

    if(t[0])
      cam->moveX(-NB);
    else;

    if(t[1])
      cam->moveX(NB);
    else;

    if(t[2])
      cam->moveY(-NB);
    else;

    if(t[3])
      cam->moveY(NB);
    else;

#undef NB

    if(t[4]) {
      cam->increaseWidth(- cam->getZoomXSpeed() * 2);
      cam->increaseHeight(- cam->getZoomYSpeed() * 2);
    }
    else;

    if(t[5]) {
      cam->increaseWidth(cam->getZoomXSpeed() * 2);
      cam->increaseHeight(cam->getZoomYSpeed() * 2);
    }
    else;

    // on met à jour
    if(e4._alpha == 255)
      down = -5;
    else if(e4._alpha == 0)
      down = 5;
    
    e4._alpha += down;
    // Nettoyage de l'écran

    glClear(GL_COLOR_BUFFER_BIT);
    subscene->draw();

    // Actualisation de la fenêtre

    SDL_GL_SwapWindow(fenetre);

    SDL_Delay(10);
  }


  // On quitte la SDL

  delete shaders[0];
  delete shaders[1];
  delete shaders[2];

  SDL_GL_DeleteContext(contexteOpenGL);
  SDL_DestroyWindow(fenetre);
  SDL_Quit();

  return 0;
}