split screen - Gestion de la camera avec glViewPort
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:
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:
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:
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 :
http://img4.hostingpics.net/thumbs/m...0523172228.png
Je sollicite donc votre aide, merci d'avance