IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Comment remplacer glrotate3fet gltranslate3f dans OpenGL 4.2


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 926
    Par défaut Comment remplacer glrotate3fet gltranslate3f dans OpenGL 4.2
    Bonjour,
    Dans mon projet OpenGL j'utilise les fonctions glRotate3f et glTranslate3f,
    et si un jour je veux pour une raison de compatibilité, adapter mon projet de vers OpenGL 4.2 ,
    quelle est donc l'équivalent de ces fonctions ci - dessous ?
    glRotate3f , glTranslate3f.

    Est ce que je vais devoir les redéfinir ?
    car un jour ,les fonctions marquées "deprecated" vont disparaitre .

    Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 66
    Par défaut
    Il n'y a pas d'équivalent, il faut que tu fasses toi même la multiplication par des matrices de rotation ou de translation et que tu envoies ces matrices au shader.

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 926
    Par défaut
    Citation Envoyé par orochimaru Voir le message
    Il n'y a pas d'équivalent, il faut que tu fasses toi même la multiplication par des matrices de rotation ou de translation et que tu envoies ces matrices au shader.
    Mais pourquoi ces fonctions elementaires sont deprecated ?
    elles sont pourtant simple d'utilisation.
    C'est plus simple d'utiliser ces fonctions que de faire soi même la multiplications de matrices.
    Je plains les developpeurs non matheux.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 618
    Par défaut
    C'est pour justement forcer les développeurs à se mettre aux maths. OpenGL est une bibliothèque très bas niveau. Si un développeur développant en OpenGL ne sait pas maitriser un minimum les matrices, il n'en sortira rien de bon... Mieux vaut alors qu'il se tourne vers quelque chose de plus haut niveau, genre OpenSceneGraph, OpenInventor, Ogre, etc... Ou au pire une petite bibliothèque de math genre GLM.

    L'autre raison est qu'à terme les matrices ModelView et Proj vont disparaitre pour que chacun puisse utiliser son propre système de coordonnée. glRotate et autre n'auront alors plus de sens.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Les fonctions du style glVertex* (ou autre) sont horribles en terme de performances (aucune optimisation du coté du transfert des coordonnées au GPU ...).

    Sinon, je conseille aussi GLM pour la gestion des matrices. Peu ou pas de connaissances sont requises pour l'utiliser et cela remplace correctement les fonctions supprimé d'OpenGL.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    l'équivalent des rotate et translate d'un model peuvent se déclarer ainsi avec glm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    glm::mat4 Projection = glm::perspective(45.0f, 16.0f / 9.0f, 0.1f, 100.0f);
    		// Camera matrix
    		glm::mat4 View       = glm::lookAt(
    			glm::vec3(kCamPos.x, kCamPos.y, kCamPos.z), // camera position in world space
    			glm::vec3(kLookAt.x, kLookAt.y, kLookAt.z), // look
    			glm::vec3(0,0,1)  // Head is up
    			);
    		glm::mat4 Model = glm::translate(glm::mat4(1.0f),glm::vec3(kPosition.x, kPosition.y, kPosition.z)); // glTranslatef
    		Model = glm::rotate(Model, kRotation.x, glm::vec3(1.0f, 0.0f, 0.0f));//similar to glRotatef(Rx,1,0,0);
    		Model = glm::rotate(Model, kRotation.y, glm::vec3(0.0f, 1.0f, 0.0f));//similar to glRotatef(Ry,0,1,0);
    		Model = glm::rotate(Model, kRotation.z, glm::vec3(0.0f, 0.0f, 1.0f));//similar to glRotatef(Rz,0,0,1);
    		glm::mat4 MVP = Projection * View * Model;
    kPosition étant un vec3(x,y,z) : la position du model
    kCamPos et kLookAt sont respectivement vec3 de la position de la caméra et du point qu'elle regarde
    kRotation est un vec3 de la rotation du model pour chaque axe

    Dans ton shader il te faut multiplier la position du vertex par MVP

    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/12/2005, 11h15
  2. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  3. [D6] Comment remplacer des chaînes dans un fichier ?
    Par fabien25 dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2005, 13h37
  4. Réponses: 5
    Dernier message: 25/01/2005, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo