L'animation et les grands projets.
Je m'intéresse depuis quelques temps à OpenGL, directx, etc. Mais plus OpenGL et je me pose les questions suivantes:
Entre dessiner un triangle, faire un rendu, bref des trucs simples, tout cela est bien jolie, mais pour les trucs plus complexes comme créer une animation, par exemple, quand on créé un jeu 3D quelconque, est-ce qu'on doit créer notre animation dabord avec notre logiciel comme 3dsmax et ensuite l'exporter dans un format d'animation précis ou sont exporté chaque frame (comme dans une animation gif, une pose par frame ?)
Ou si le bonhomme 3D est exporté dans une format précis comme .x ou 3ds puis on l'ouvre avec notre code et la on change les coordonnées des points manuellement ? Il me semble que ça serait trop complexe, est-ce qu'il y a des outils qui permet de calculer une matrice de changements des coordonnées selon une animation faite entre 2 poses par exemple ? De cette façon pour créer notre animation il suffirait d'appliquer à notre objet ces nouvelles coordonnées dans la matrice en la parcourant avec une boucle for en réglant une certaine vitesse d'exécution pour contrôler la rapidité de l'animation ?
Comment s'y prenne les créateurs de jeux comme Quake3, Doom3, Raven shield, etc. ?
C'est cela qu'on appelle du temps réel ou du pré-rendu ?
Et OpenGL(sous windows) ce sont des librairies, dll, mais ces dll se servent de quoi exactement ? des Api Windows, GDI32 ? Dans le fond ce ne sont que des fonctions qui utilisent les Api Win32 ?? Mis à part les calcules complexe, mouvements, rotation d'objets, éclairage, etc. Enfin tout ça pour finalement "générer" une image 2d mais qui parait 3d à cause de son apparence, son ombrage, son éclairage, etc. ? Finalement la 3d n'est que la manipulation d'images 2d.
Ça doit être complexe quand on fait un jeu multijoueur j'imagine, car on doit envoyer l'objet au complet au travers le réseau, puis envoyer ensuite les coordonnées de la "vue" de cette objet, car si l'autre est placé différement dans l'espace virtuel il n'aura pas la même vision de l'objet que l'autre personne. Est-ce que c'est aussi simple ? Envoyer l'objet puis les coordonnées de "vue", placer l'objet, puis faire le rendu.
Si c'est seulement cela, faire un jeu ne semble pas bien compliqué. Long, oui, mais compliqué, non. :wink:
Re: L'animation et les grands projets.
Citation:
Envoyé par AsmCode
Entre dessiner un triangle, faire un rendu, bref des trucs simples, tout cela est bien jolie, mais pour les trucs plus complexes comme créer une animation, par exemple, quand on créé un jeu 3D quelconque, est-ce qu'on doit créer notre animation dabord avec notre logiciel comme 3dsmax et ensuite l'exporter dans un format d'animation précis ou sont exporté chaque frame (comme dans une animation gif, une pose par frame ?)
oui, quand on passe en gros projet, on utilise des modeleurs 3d pour créer le monde, statique ou dynamique, et on exporte dans un format perso (le plus souvent)... pour l'animation, on ne stocke pas TOUT les frames, on stocke des "key frames", et, pour chaque frame dessiné à l'écran, la position de chaque vertex est calculé par interpolation (linéaire ou autre) entre les deux keyframes avoisinants... on peut stocker la position de tout les vertex à chaque keyframe, ou celle de "bones", sachant que chaque vertex est rattaché à un bone du modèle3d... quelques techniques en vrac ;)
Citation:
Envoyé par AsmCode
Ou si le bonhomme 3D est exporté dans une format précis comme .x ou 3ds puis on l'ouvre avec notre code et la on change les coordonnées des points manuellement ? Il me semble que ça serait trop complexe, est-ce qu'il y a des outils qui permet de calculer une matrice de changements des coordonnées selon une animation faite entre 2 poses par exemple ? De cette façon pour créer notre animation il suffirait d'appliquer à notre objet ces nouvelles coordonnées dans la matrice en la parcourant avec une boucle for en réglant une certaine vitesse d'exécution pour contrôler la rapidité de l'animation ?
il me semble avoir répondu plus ou moins avant ;)
pour le coup des matrice, quand l'animation est prédéfinie (c'est le cas ici), on ne vas pas alourir le machin avec une matric qui aimplique qu'à chaque frame on calcule la matric et on multiplie chaque vertex par la matrice... pour des questions d'optimisation du temps de calcul, c'est mieux deprécalculer la position des vertex et des les stocker en masse... pour peu qu'il n'yen ai pas une infinité non plus, il faut adapter les methode à chaque cas de figure... c'est bien là où réside une difficulté quand on cherche à effectuer un moteur 3d... quelles techniques serta la meilleure ici... :D
Citation:
Envoyé par AsmCode
Comment s'y prenne les créateurs de jeux comme Quake3, Doom3, Raven shield, etc. ?
telecharges le moteur3d de quake2, jette un coup d'oeil aux resources des quake3, ça t'aidera pas mal à percevoir les techniques utilisées (shaders, stockage des perso, des maps, scripts d'ia...)
Citation:
Envoyé par AsmCode
C'est cela qu'on appelle du temps réel ou du pré-rendu ?
qu'entend tu par cela ?
En pricnipe, opengl est fait pour le temps réel, un calcul rapide pour un résultat pas forcément très flatteur à l'oeil... le pré rendu c'est un rendu le plus souvent software (plus lent qu'opengl mais en aucun limité par quqlques fonctionnalités => tout est alors possible, pour peu qu'on y mette le temps)... ça donne de la 3d style toy story (y'en a ptet eu dautre depuis ? :lol:) c'est jouli comme tout mais là c'est 10h de rendu pour avoir un frame.. on essai que les jeux video (donc, opengl) génère un frame tout les 1/60ème de seconde... ça fait un gouffre, faut pas confondre ces deux aspects de l'infographie ;)
Citation:
Envoyé par AsmCode
Et OpenGL(sous windows) ce sont des librairies, dll, mais ces dll se servent de quoi exactement ? des Api Windows, GDI32 ? Dans le fond ce ne sont que des fonctions qui utilisent les Api Win32 ?? Mis à part les calcules complexe, mouvements, rotation d'objets, éclairage, etc. Enfin tout ça pour finalement "générer" une image 2d mais qui parait 3d à cause de son apparence, son ombrage, son éclairage, etc. ? Finalement la 3d n'est que la manipulation d'images 2d.
certe, certe... enfin, quand tu construis une scène OpenGL, tu lui donne à manger des vecteurs à 3 dimensions, et ta scène est modélisable par un espace à 3 dimensions... d'où la légitimité d'appeler cela de la 3d...le rendu final (rastérisation) n'est qu'une étape parmis tant d'autres, bien plus orienté 3d... pour le coup des dll... je ne pense pas qu'OpenGL utilise Win32... enfin pas tant que ça.. à la base, déjà, la librairie est portable... je pense que le programme que tu fais communiques directement avec le driver de la carte 3d.. mais bon... ce ne sont que des supputations et si quelqu'un est plus calé sur ce sujet, ça m'intéresse aussi...
Citation:
Envoyé par AsmCode
Ça doit être complexe quand on fait un jeu multijoueur j'imagine, car on doit envoyer l'objet au complet au travers le réseau, puis envoyer ensuite les coordonnées de la "vue" de cette objet, car si l'autre est placé différement dans l'espace virtuel il n'aura pas la même vision de l'objet que l'autre personne. Est-ce que c'est aussi simple ? Envoyer l'objet puis les coordonnées de "vue", placer l'objet, puis faire le rendu.
Non, en réseau on envoi pas des milliers de coordnées de vertex sur le net... c'est stupide, on s'assure que les deux gars en face ont tout deux ces coordonées sur leur disque, et tout ce que l'on envoi au final ce sont des positions de joueur (par exemple, 3 floats), le nombre de joueur sur la carte (un int), etc, etc.. donc au final c'est pas si terrible que ça
Citation:
Envoyé par AsmCode
Si c'est seulement cela, faire un jeu ne semble pas Bien compliqué. Long, oui, mais compliqué, non. :wink:
c'est sur que vu de loin, comme ça... :D lances toi un peu et tu verras par toi même ;)