Bonjour,

J'ai commencer il y a quelques semaines un projet de bomberman réalisé en C++ avec openGL. Je suis en train d'implementer un mode split-screen pour pouvoir jouer à 2. Seulement ca me pose pas mal de problème notemment sur l'utilisation de la fonction openGL "glViewPort".

Voici un extrait de mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
  std::list<AObject*>::iterator itb = this->objects_.begin();
 
  glViewport (0, 0, 1920/2, 1080);
 
   for (; itb != this->objects_.end(); ++itb) // Ici c'est la liste des objets (par exemple un bloc, un joueur ...) que l'on parcoure pour l' ecran 1
    {
      if ((*itb)->getGoDraw())
        (*itb)->draw();
    }
  itb = this->objects_.begin();
  glViewport (1920/2, 0, 1920/2, 1080);
  for (; itb != this->objects_.end(); ++itb) // la meme chose pourl l'ecran 2                                                                                                                                                   
    {
      if ((*itb)->getGoDraw())
        (*itb)->draw();
    }
  this->window_.display();
La gestion des cameras se fait dans le déplacement du joueur sur la map, en gros à chaque fois qu'on bouge le joueur1 on va bouger la caméra 1 de même pour le joueur 2

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void    MyGame::changePosCamera(float x, float y, float z, int player) // cette fonction est appellé par le joueur (qui est un objet), on définit si c'est le joueur 1 ou le joueur 2 à la construction du joueur
{
  if (player == 1)
    this->cameraJ1.setPositionCamera(x, y, z);
  if (player == 2)
    this->cameraJ2.setPositionCamera(x, y, z);
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
void Camera::setPositionCamera(float _x, float _y, float _z)
{
  this->lengthView = 20;
  position_.x = _x + 1200;
  position_.y = _y + 500;
  position_.z = _z;
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();                                                                                                                                                                               
  gluPerspective(this->lengthView, 450.0f/400.0f, 1.0f, 20000.0f);
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
 
  gluLookAt(position_.x, position_.y, position_.z,
            position_.x, 0, position_.z,                                                                                                                                                         
            0.0f, 1.0f, 0.0f);
 
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LEQUAL);
}
J'ai donc setté une caméra pour chaque joueur, mais le problème ici c'est qu'il se passe exactement la même chose sur les 2 écrans, comme s'il y avait qu'une seule caméra. En gros quand je Joueur 1 va bouger il va bouger la caméra des 2 écrans de même pour le joueur 2 et je n'arrive pas à comprendre pourquoi ...

Voila un screen pour mieux se rendre compte :



Je sollicite donc votre aide, merci d'avance