2010-03-25 4 views
3

Dire que je l'utilise glRotate pour traduire le point de vue actuel, basé sur une entrée utilisateur arbitraire (par exemple, si la clé gauche est enfoncé alors rtri+=2.5f)En utilisant glRotate et glTranslate avec détection de collision

glRotatef(rtri,0.0f,1.0f,0.0f); 

Ensuite je dessine le triangle dans la position pivotée:

glBegin(GL_TRIANGLES); // Drawing Using Triangles 
    glVertex3f(0.0f, 1.0f, 0.0f); // Top 
    glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left 
    glVertex3f(1.0f,-1.0f, 0.0f); // Bottom Right 
glEnd(); // Finished Drawing The Triangle 

Comment puis-je obtenir les vertexes traduits résultants pour la détection de collision? Ou devrais-je appliquer manuellement la transformation moi-même et doubler ainsi le travail?

La raison pour laquelle je demande est que cela ne me dérangerait pas de mettre en place des listes d'affichage.

Répondre

3

Les objets que vous utilisez pour la détection de collision ne sont généralement pas les objets que vous utilisez pour l'affichage. Ils sont généralement plus simples et plus rapides.
Alors oui, la façon de le faire est de maintenir la transformation que vous utilisez manuellement mais vous ne doublerez pas le travail parce que les objets sont différents.

0

Votre boucle de jeu devrait ressembler (avec C++ syntaxe):

void Scene::Draw() 
{ 
    this->setClearColor(0.0f, 0.0f, 0.0f); 

    for(std::vector<GameObject*>::iterator it = this->begin(); it != this->end(); ++it) 
    { 
     this->updateColliders(it); 
     glPushMatrix(); 
      glRotatef(it->rotation.angle, it->rotation.x, it->rotation.y, it->rotation.z); 
      glTranslatef(it->position.x, it->position.y, it->position.z); 
      glScalef(it->scale.x, it->scale.y, it->scale.z); 

      it->Draw(); 

     glPopMatrix(); 
    } 

    this->runNextFrame(this->Draw, Scene::MAX_FPS); 
} 

Ainsi, par exemple, si j'utilise un collisionneur de boîte de base avec un cube de la méthode de tirage au sort:

  • Fill l'écran avec une couleur noire (rgb: (0,0,0))
  • Pour chaque objet
    • Calculer les collisions avec les informations de position et de taille
    • Save the état de la matrice de MODELVIEW réelle
    • Transformer la matrice MODELVIEW (rotation, translation, échelle)
    • Dessiner le cube
    • Restaurer l'état de la matrice MODELVIEW
    • Vérifiez le FPS et exécutez la trame suivante à la bon moment

** la scène de classe hérite de la classe vecteur

J'espère que cela aidera! :)

Questions connexes