Comment animer une image 3D avec du code ?
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Comment animer une image 3D avec du code ?



  1. #1
    invited39cc8ef

    Comment animer une image 3D avec du code ?


    ------

    Bonjour, j'ai une question un peu innocente. Globalement, comment on fait pour animer un dessin effectué en 3D dans un paysage (exemple : un personnage qui se déplace dans un mmorpg) ? Ma vision : on écrit son code en c++ avec une fonction affecté à l'objet qui est le dessin en 3D via une librairie graphique ? J'imagine que l'environnement graphique (herbe, ciel...) se fait par un moteur graphique. Merci de la réponse.

    -----

  2. #2
    pm42

    Re : Comment animer une image 3D avec du code ?

    Il y a de nombreuses librairies qui font cela, on les appelle des moteurs : https://fr.wikipedia.org/wiki/Liste_de_moteurs_de_jeu

    Ils sont eux-mêmes construits au dessus de librairies 3D comme OpenGL. Après, les techniques sous-jacentes sont encore un sujet en soi.

  3. #3
    invite936c567e

    Re : Comment animer une image 3D avec du code ?

    Bonsoir

    Le dessin d'objets en 3D consiste généralement à calculer la projection sur le plan de l'écran des points qui les définissent, et l'orientation des surfaces élémentaires triangulaires délimitées par ces points. Il s'agit d'une projection conique, qui font notamment converger vers le même points de fuite des lignes parallèles entre elles. L'orientation des surfaces élémentaires triangulaires sert notamment à déterminer leur visibilité (occultées lorsque vues de dos) et leur apparence (ombres, reflets).

    Le résultat en 2D dépend de la position dans l'espace 3D du plan de projection de l'écran (qui définit le point de vue) et des points des différents objets, et éventuellement des éléments affectant le rendu des surfaces (comme ceux définissant l'éclairage de la scène).

    L'animation d'objets consiste à recalculer une nouvelle image 2D à chaque modification de ces éléments. Dans le cas d'objets immobiles, on peut déjà créer des animations en modifiant le point de vue, l'éclairage ou l'aspect des surfaces. On peut aussi modifier la forme et la position d'un objet en calculant l'évolution de la position des points qui le constituent à l'aide de règles mathématiques (rotations, translations, mouvements complexes...) et de paramètres issus du programme (e.g. IA) ou de l'interface homme-machine (e.g. joystick).


    Ces opérations peuvent être réalisées de différentes façons, matériellement et logiciellement, avec du code spécifique ou bien des bibliothèques génériques.

  4. #4
    invite9dc7b526

    Re : Comment animer une image 3D avec du code ?

    il faut aussi savoir que quand on veut produire une image réaliste on "triche" en ce sens que tout n'est pas modélisé en 3D. Si par exemple on voit des personnages devant une pelouse, qui dans la réalité contiendrait des millions de plantes, chaque brin d'herbe n'est pas modélisé en 3D. En fait la pelouse est représentée par une surface plane ou en tout cas assez lisse, sur laquelle est plaquée ce qu'on appelle une texture, c'est-à-dire une image qui imite l'herbe. Même chose si on veut montrer un mur rugueux: la rugosité n'est pas modélisée en 3D, c'est une texture.

  5. A voir en vidéo sur Futura
  6. #5
    invited39cc8ef

    Re : Comment animer une image 3D avec du code ?

    Merci beaucoup pour chacune des précisions. Donc si j'ai bien compris de ce que j'ai lu, le logiciel Open GL (Direct 3D ou autre...) permet de créer des images 3D à partir d'images 2D à l'aide de règles mathématiques et de codes. Mais quelque chose m'échappe, un graphiste qui créé des images avec Open GL ne dessine pas vraiment sur une tablette ou support qui permet de mettre sur ordinateur sa création fait à la main. Il y aurait alors deux sortes de graphistes possibles ? Un qui modélise qu'avec des logiciels et un autre qui dessine et qui "numérise sa création". Dans les deux cas, est-ce bien un codage/programme (C, Java...) qui permettra ensuite d'animer l'image produit ? Comment on lie l'environnement qui permet de créer un programme en C avec ce que le graphiste à créer. (Exemple : si je veux qu'un personnage avance, j'ai besoin de créer une fonction avec des coordonnées). Un moteur de jeu lie les deux ? Car OpenGl et Visual Studio ne sont aucunement liés si je ne me trompe pas.

  7. #6
    invite51d17075
    Animateur Mathématiques

    Re : Comment animer une image 3D avec du code ?

    Citation Envoyé par Uhue Voir le message
    Il y aurait alors deux sortes de graphistes possibles ? Un qui modélise qu'avec des logiciels et un autre qui dessine et qui "numérise sa création".
    "numérise sa création" n'est pas clair...
    d'ailleurs je ne vois pas bien à quoi cela correspond.
    dans le doute, je dirais que ce qui ressort de l'artistique passe au départ par un travail 2D ( personnages, décors ,....)
    et effectué par des "artistes".
    ce travail sert ensuite de "patron" pour l'infographiste qui travaille directement sur ordi avec les outils logiciels ad hoc en fct du "sujet".

    par ailleurs, il est fréquent aussi d'utiliser du "matériel" réel , c-a-d des prises de vue diverses et variées ( fixes ou animées) qui serviront ensuite, une fois numérisées, pour des textures, des arrières plans, des effets spéciaux.......( et aussi des visages, sculptures, décors.. scannés par laser par exemple )

    enfin, concernant l'animation de personnage, il y a globalement deux types de méthode:
    - celle inspirée de l'animation traditionnelle, avec des poses clés et un "intervalage" fait automatiquement par le soft.
    ( typiquement les dessins animés actuels en 3D)
    - par captation sur des acteurs ( corps et/ou visage ) ( ex Avatar )

  8. #7
    JPL
    Responsable des forums

    Re : Comment animer une image 3D avec du code ?

    Citation Envoyé par ansset Voir le message
    - par captation sur des acteurs ( corps et/ou visage ) ( ex Avatar )
    La première fois que je l’ai vu utiliser c’est pour Golum dans Le Seigneur des Anneaux, mais techniquement Avatar c’est d’un autre niveau.

    Pardon pour le hors sujet.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  9. #8
    invite6486d7bd

    Re : Comment animer une image 3D avec du code ?

    Citation Envoyé par Uhue Voir le message
    Merci beaucoup pour chacune des précisions. Donc si j'ai bien compris de ce que j'ai lu, le logiciel Open GL (Direct 3D ou autre...) permet de créer des images 3D à partir d'images 2D à l'aide de règles mathématiques et de codes.
    On ne crée pas des images 3D, mais on défini une scène en 3D et la manière de produire son rendu.
    OpenGl (par exemple) sert à ça, fournir des fonctions aux programmeurs pour définir la scène et la manière de produire son rendu.
    On rend donc la scène sur un écran, qui fini donc comme toutes les images sur un écran, en 2D.

    Mais quelque chose m'échappe, un graphiste qui créé des images avec Open GL ne dessine pas vraiment sur une tablette ou support qui permet de mettre sur ordinateur sa création fait à la main.
    Les graphistes n'utilisent pas OpenGl, mais des outils (comme blender, et il y en a une flopée) qui facilitent la production des données à envoyer à la carte pour définir la scène.
    Entre autre, ces outils facilitent la définition d'un des attributs des "points" (vertexs) permettant d'apposer (mapper) des images (des textures) sur les formes élémentaires (en général des triangles) constituant les objets 3D.

    Il y aurait alors deux sortes de graphistes possibles ? Un qui modélise qu'avec des logiciels et un autre qui dessine et qui "numérise sa création".
    Un programmeur peut aussi définir ses objets 3D sans outil quand la forme s'y prête.

    Dans les deux cas, est-ce bien un codage/programme (C, Java...) qui permettra ensuite d'animer l'image produit ?
    Une "image" ne peut pas être animée si on ne recrée pas la scène.
    Il faut renvoyer des données transformées à la mémoire de la carte graphique avec un recalcule du rendu pour donner une impression d'animation.
    Même si on ne fait que changer le point de vue, il y a recalcule du rendu sur la base des nouvelles coordonnées du point de vue ré-envoyé à la carte.
    Mais il n'est pas toujours nécessaire de ré-envoyer toutes les données (par exemple les textures peuvent être stockées une fois pour toutes), et on peut aussi optimiser par divers mécanismes en employant des mécanismes de stockage dans la mémoire rapide par exemple.

    Comment on lie l'environnement qui permet de créer un programme en C avec ce que le graphiste à créer. (Exemple : si je veux qu'un personnage avance, j'ai besoin de créer une fonction avec des coordonnées). Un moteur de jeu lie les deux ?
    Par exemple, mais pour des petits projets on fait ça à la main (et on n'appelle pas ça un moteur de jeu si on est modeste)
    Un vrai moteur de jeu ça peut couter des millions à développer, et c'est pas sûr que les développeurs vous le vendent...

    Car OpenGl et Visual Studio ne sont aucunement liés si je ne me trompe pas.
    Exact, OpenGl fournit des fonctions standardisées qu'on appelle alors "Langage", à employer dans les programmes des développeurs 3D, et ces fonctions savent commander les cartes graphiques.
    Ca peut être une fonction générique, comme Activer ou Désactiver (Enable, Disable) avec le paramètre qui va bien pour préciser ce qui doit être activé ou désactivé.

  10. #9
    invite51d17075
    Animateur Mathématiques

    Re : Comment animer une image 3D avec du code ?

    Citation Envoyé par Uhue Voir le message
    Dans les deux cas, est-ce bien un codage/programme (C, Java...) qui permettra ensuite d'animer l'image produit ?
    Citation Envoyé par LeMulet Voir le message
    Une "image" ne peut pas être animée si on ne recrée pas la scène.
    bien fait de rappeler ce principe de fond.
    la phrase initiale m'avais échappée.
    elle traduisait même une sorte d'incompréhension profonde du process de fabrication.
    qui est ( en quelque sorte ) à l'opposé de ce qu'imaginait Uhue.

  11. #10
    invite44510b00

    Re : Comment animer une image 3D avec du code ?

    Citation Envoyé par Uhue Voir le message
    Car OpenGl et Visual Studio ne sont aucunement liés si je ne me trompe pas.
    Visual Studio c'est "juste" un IDE, très complet certes, mais rien d'autre; rien à voir.

  12. #11
    invite6486d7bd

    Re : Comment animer une image 3D avec du code ?

    Un explicatif simple de ce qu'est OpenGl (avec un exemple de base, plus loin sur le site, qui montre également comment éventuellement utiliser la boite à outils que l'on peut également utiliser pour simplifier la programmation : GLUT).:

    Citation Envoyé par Master124AutomatiqueUmc
    L'OpenGL est en fait une interface software (API) qui sert de lien entre votre application et les fonctions 3D de votre carte graphique.

    Seulement, l' OpenGL ne se sert qu'a ces fonctions graphiques... il est donc hors de question de lui demander de vous créer une fenêtre, ou meme de recevoir les mouvements de la souris : C'est votre application qui doit s'en charger !

    Une autre chose importante à savoir est que l' OpenGL , contrairement à direct3D, est qu'il est cross-platform .
    Autrement dit, si vous programmez votre application sous Windows, elle fonctionnera sous tous les autres systèmes d'exploitations si elle est recompilée sous ces derniers.
    Il reste juste le fait que , justement, OpenGL ne gère que la partie graphique...
    Comment alors , par exemple, prendre les inputs du clavier alors que les fonctions utilisées sont différentes sous chaque OS (on utilisera par exemple DirectInput sous Windows, et des fonctions plus génériques sous d'autres OS)?

    C'est là qu'intervient GLUT !
    GLUT, acronyme de "Graphcs Library Utility ToolKit", est en fait une "boite à outils" compatible avec tous les OS sous lequels OpenGL fonctionne.
    Cette librairie simplifie grandement la tâche du programmeur, puisqu'elle est dédiée, elle, aux entrées-sorties, la création de la fenêtre, etc. Avec ces 2 outils, créer une application cross-platform devient un jeu d'enfant !!!

    Nous savons maintenant ce qu'est l' OpenGL, GLUT ... Reste un terme important : GLU.
    GLU (acronyme de Graphics Library utility) est en faite une librairie accessoire à l'OpenGL...
    Elle contient des fonctions bien pratiques (dessiner un cube par exemple), mais elle n'est nullement nécessaire...
    Il est tout à fait possible de recréer ces fonctions là par vous-même !

    L'OpenGL, contrairement à ce que certaines personnes pensent, continue à évoluer !
    Des nouvelles extensions apparraissent avec les nouvelles cartes graphiques.
    Parfois, ces extensions ne sont utilisées que par un seul constructeur, mais il arrive aussi que ces extensions soient normalisées par l' OpenGL ARB (Architecture Review Board).
    Pour s'implifier, il s'agit de nouvelles fonctions OpenGL.
    http://master124automatiqueumc.e-mon...es/opengl.html

    A noter donc également qu'OpenGl présente les fonctions de base communes aux cartes graphiques et qu'il faut rajouter d'autres Bibliothèques à Lien Dynamique qu'OpenGl32.dll pour avoir accés à des fonctions plus évoluées (ces autres bibliothèques sont appelées Extensions).

Discussions similaires

  1. Blender - animer wagon avec ses boogies sur un path (ou un semi remorque)
    Par invitec6763ba4 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 06/11/2015, 14h34
  2. comment se fabrique les liaisons (voir image) avec composite
    Par invite06c66a72 dans le forum Technologies
    Réponses: 7
    Dernier message: 20/03/2014, 19h29
  3. Programmation C++ avec la librairie ITK. Comment créer une image en couleur ?
    Par invite29127426 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 14/09/2009, 02h43
  4. nasa tv comment retrouver l'image avec window media playeur
    Par invite2080d46a dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 08/06/2008, 20h42
  5. comment conserver seulement une partie d'une image avec gimp
    Par fastball83 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 04/03/2008, 13h45