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 :
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
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();
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); }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 ...
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); }
Voila un screen pour mieux se rendre compte :
Je sollicite donc votre aide, merci d'avance
Partager