CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Aide projet OpenGL / Cal3D

Shaolan777
Shaolan777
Niveau 10
12 mars 2008 à 16:16:55

Salut ! :-)

Bon alors voilà, je suis en Master 1ère année informatique. Et là, bien j'ai un projet/recherche à faire durant ce semestre. En fait, il s'agit de créer un simulateur de déplacement de foule "intelligente" (gestion de collisions, calcul d'itinéraire, etc...).
Le plus gros du projet est déjà réalisé, il reste essentiellement à intégrer un modèle 3D de personnages animés afin de simuler la foule (représentée pour l'instant par des tétrahèdres). L'idéal serait d'intégrer à OpenGL un modèle Cal3D, ce qu'il est normalement possible de faire. Le problème, c'est que je ne trouve rien de concret sur le net. J'avoue être complètement perdu dans toutes les explications que je trouve, je n'arrive pas à faire le tri. Du coup, ben, je ne sais pas quoi faire :-(

Donc j'ai décidé de poster ici, dans ce forum, dans l'espoir que l'un d'entre vous puisse m'éclaircir sur le 'comment faire' de cette intégration. J'ai lu que ce n'est pas difficile, mais impossible de trouver un bon tuto concernant ce problème. :snif: En plus je n'ai pas beaucoup de temps à consacrer à la recherche d'infos avec tout le boulot et les projets que l'on a dans les autres matières... donc difficile à gérer.

Ainsi donc je m'en remets à vous en espérant une petite aide. Par contre, si vous connaissez un meilleur modèle 3D et FACILE à inclure dans un projet OpenGL, je suis preneur, Cal3D étant simplement préférable mais pas obligatoire. Le tout est que ce soit plutôt performant puisque ce projet doit pouvoir gérer le déplacement de plusieurs milliers de personnages à l'écran.

Voilà voilà, ça serait cool d'avoir des avis sur la question de personnes ayant déjà bataillé sur un problème similaire :ok:

Merci d'avance en tout cas ^^

FlyingPhantom01
FlyingPhantom01
Niveau 10
12 mars 2008 à 17:37:26

Je ne fais pas beaucoup de C++, et je ne connais pas Cal3D de surcroît ; mais dans une petite recherche sur google, je suis tombé sur un site expliquant assez bien la démarche pour le rendering (dans 5., "Usage") :
http://download.gna.org/cal3d/documentation/guide/ (Anglais)

Ce site n'est pas forcément basé sur une utilisation avec OpenGL, mais reste plus général.

Je ne sais pas si tu auras ton compte dessus, mais je te souhaite bon plaisir avec OpenGL ! :)

:ok:

Shaolan777
Shaolan777
Niveau 10
12 mars 2008 à 19:03:30

Merci beaucoup :ok:

Je vais voir ce que ça donne. :-)

En tout cas si quelqu'un a d'autres infos, je suis preneur :ange:

pilo1488
pilo1488
Niveau 10
14 mars 2008 à 18:07:11

Salut!

je connais "bien" Cal3D (j'avais fais un bout de TER dessus :), et le rendus est assez "simple" en effet.
De mémoire c'est toi qui affiche ton modèle 3D skinné, cal3D ne fait que calculé les matrices associé à chaques bones.

Par contre, a moins d'avoir des modèles simples, je pense pas que tu puisse arrivé à skinner 1000 character en temps reel.

En effet la doc décrit ce qu'il faut et "suffit" de faire :
http://download.gna.org/cal3d/documentation/guide/x475.html#AEN548

Shaolan777
Shaolan777
Niveau 10
27 mars 2008 à 22:12:54

Merci des réponses :-)

pilo, vu que tu connais "bien" Cal3D, peut-être pourras-tu répondre ) ma question :
Comment faire pour créer une instance de CalCoreModel ? J'ai beau essayer tout ce que je trouve, j'ai toujours des erreurs de compilation genre "CalCoreModel *cal_core_model = new CalCoreModel("dummy");"

Franchement je sais plus comment faire. Pourtant, c'est obligatoire pour se servir d'un modèle Cal3D non ?

Au pire, tu n'aurais pas un exemple ou un morceau de code dont tu te serais servi, et qui fonctionne ?

Merci d'avance :ange:

Shaolan777
Shaolan777
Niveau 10
27 mars 2008 à 22:14:07

Pardon, mauvais copier/coller :honte:

L'erreur de compilation c'est : ./wlAvatar.h:38: error: field `myCoreModel' has incomplete type

désolé...

Shaolan777
Shaolan777
Niveau 10
27 mars 2008 à 22:25:26

En fait non c'est bon, j'ai trouvé mon erreur... pénible de batailler pendant plus d'une heure et de trouver juste après avoir demandé de l'aide... :-p

Shaolan777
Shaolan777
Niveau 10
28 mars 2008 à 00:24:27

Encore moi...

Au final la précédente erreur a disparu, mais celle-ci est apparue et je n'arrive pas à m'en débarrasser :
wlAvatar.cxx:(.text+0x78): undefined reference to
`CalCoreModel::CalCoreModel(std::basic_string<char
, std::char_traits<char>, std::allocator<char> > const&)'

Une idée ? :ange:
Je ne sais plus quoi faire... :-(

Thommas
Thommas
Niveau 7
28 mars 2008 à 09:58:40

Il ne trouve pas un .o (un objet compilé à partir de la source en cxx)
Regarde dans ton makefile s'il ne manque pas des sources qui ne sont pas compilées.

Thommas
Thommas
Niveau 7
28 mars 2008 à 09:59:17

Et vérifie tes includes (.hxx) avant aussi.

pilo1488
pilo1488
Niveau 10
28 mars 2008 à 16:03:35

Shaolan777> si biensur je peux te filer du code qui l'utilise, envois moi un mail avec l'addresse dans mon profil pour que je pense a le chercher ce week end.

Comme Thommas le dit, je pense qu'il manque un fichier .o, ou un liens vers une lib.

Shaolan777
Shaolan777
Niveau 10
30 mars 2008 à 12:55:06

En fait cette erreur était simplement dûe à un oublie du -lcal3d dans les libs de mon .pro :p)
N'empêche, qu'est-ce que j'ai bataillé pour trouver ça ^^ Abusé...

Mais maintenant j'ai mon personnage qui apparaît à l'écran, ça fait plaisir ! Par contre, les textures ne sont pas appliquées sur le personnage, va falloir que je vois ça de plus près...

En tout cas merci de vos réponses, et encore merci pilo, je vais regarder ton code dans la journée :-)))

Shaolan777
Shaolan777
Niveau 10
30 mars 2008 à 17:09:16

Ah !! L'animation marche enfin ! :fier:

Ton code m'a été utile pilo, il m'a permis de comprendre à quel endroit faire mon update ^^
Par contre j'ai toujours ce problème d'affichage des textures : mon personnage est toujours blanc/gris.
Etant donné que j'affiche aussi un terrain, est-ce que ça ne pourrait pas être un problème de mélange d'appels de fonctions gl de lumière ou autres ?
Une idée ?

De toute façon, je vais continuer à chercher la solution, mais si quelqu'un a une idée de l'origine du problème, je suis preneur... :ange:

LostGalaxies
LostGalaxies
Niveau 5
30 mars 2008 à 18:28:20

OpenGL est une machine à états : si tu changes la lumière à un endroit, elle restera comme telle jusqu'à nouvel ordre. Si tu textures ton terrain en 1D (Par exemple) et que tu oublies de repasser en 2D ensuite, tes texturings 2D ne fonctionneront plus.
95% de mes problèmes en OpenGL ont pour cause un oubli malencontreux de remise en état de ce que je touche.

Shaolan777
Shaolan777
Niveau 10
03 avril 2008 à 21:28:01

Salut :-)

Bon, ça avance doucement, mais ça avance ^^
Par contre, je n'ai toujours pas trouvé ce problème de textures...

Mais là j'aurais aimé un peu d'aide, ou du moins quelques explications :
en ce moment j'en suis aux animations. J'aimerais, suivant la vitesse d'un personnage, lui faire faire telle ou telle animation. J'ai vu en recherchant sur le net qu'il faut utiliser les fonctions clearCycle(...) et blendCycle(...). Le problème est que malgré les explications, je ne comprends pas trop comment elles marchent... Comment faut-il procéder pour pouvoir glisser d'une animation à une autre (en fonction de la vitesse) ? Où faut-il appeler ces 2 fonctions pour modifier les animations ?

Désolé de vous embêter encore une fois mais là j'ai du mal à comprendre le fonctionnement. Quelqu'un pourrait-il m'expliquer comment se servir de ces fonctions svp ?

En tout cas merci d'avance :ange:

pilo1488
pilo1488
Niveau 10
05 avril 2008 à 12:27:51

Salut Shaolan,

Je suis content que mon code est pu t'aider ;)

Pour le mélange des aniamtion c'est pas tès compliqué.
Supposons que tu as 3 animation, une ilde (le perso fait rien), une ou il marche, et une ou il court (si tu veux des animation j'ais des url vers des mocap gratuite que tu peux convertir en cal3D avec blender).
Toutes ces animations sont cyclique, seulement, elles vont etre mélanger suivant la vitesse.
Supposons que la vitesse de ton perso est v. Tu calcul 3 coeficient a1, a2, a3, respectivement associé à chaque animation idle, marcher, courrir.
Ensuite tu affecte donc ces 3 coeficient au animation :

myModel.getMixer()->blendCycle(idleAnimationId, a1, 0.0f);
myModel.getMixer()->blendCycle(walkAnimationId, a2, 0.0f);
myModel.getMixer()->blendCycle(runAnimationId, a3, 0.0f);

J'ais mis 0.0f en temps de transition, tu peux peut etre ajuster pour avoir un meilleur resultat.
Ensuite comment calculer tes coef :
a1 = v > 0.1f? 0.0f : (0.1f - v) * 10.0f; // idle est utilisé que si le perso bouge pas, ou peu
a2 = v > 1.0f? 0.0f : (v <= 0.1f? a2 = 1.0 - a1 : (0.9f - (v - 0.1f)) / 0.9f); // marche entre v = 0.0f et v = 1.0f
a3 = 1.0f - (a1 + a2); // le reste du temps, on cours!

Tu peux aussi modifier la vitesse des animations pour les faire coincider etc

Peut etre certain auront une meilleur approche que moi :D Notamenent pour le calcul des coeficient ;)

Shaolan777
Shaolan777
Niveau 10
06 avril 2008 à 00:16:00

Merci beaucoup pilo :ange:

En gros j'ai juste à recalculer les 3 coefs dès que la vitesse change et les envoyer avec blendCycle ? Plutôt pratique et simple, c'est cool. Si j'ai bien compris ces coefs a1 a2 et a3 sont une sorte de pourcentage de chaque animation correspondant à une vitesse précise. Et donc la somme est 1.
Ok je pense que c'est bon.

Par contre, pour le dernier paramètre (celui de transition), je ne comprends pas trop l'effet qu'il a sur les animations ^^

Après, je risque peut-être paraître bête mais tu veux dire quoi par mocap ? Je n'ai jamais croisé ce mot :rouge:
Ce sont des url vers des modèles de personnages ou ce sont des animations seules ? Je pensais que chaque modèle 3D avait ses propres anims...
Dans tous les cas je suis bien sûr d'accord pour ces url. J'ai juste un seul modèle 3d d'une femme guerrière... :rire2:

Enfin bref, désolé pour ces questions, encore... :-)

Mais infiniment merci de m'aider comme tu le fais, vraiment. T'es super :ok:

pilo1488
pilo1488
Niveau 10
07 avril 2008 à 03:56:00

Mocap = motion capture ;)
Bon en general il faut effectivement les éditer un minimum pour les faire fonctionner sur un skelette différent que celui utilisé lors de l'enregistrement, mais avec blender c'est faisable.

alors les url :
http://www.mocapdata.com/
http://mocap.cs.cmu.edu/

Pour les coefs : en effet leur somme devrait faire 1. Et effectivement, c'est le % de chaque animation dans l'animation finale.
regarde la :
http://www.gamasutra.com/features/20030704/edsall_01.shtml

c'est une technique plus avancé, mais c'est interessant je trouve. C'est beaucoup mieux expliqué que ce que j'ais fais au dessus :D

Le paramètre de transition dans cal3D est la pour éviter un changement brusque de poids de l'animation : si tu as une anim avec un blend coef de x, et que tu passe en argument y et 1.0 pour le temps, et bien il va s'écouler 1s pour que le poids de l'anim passe de x à y (avec interpolation entre temps). Je sais pas si je suis très clair... c'est un peu tard hehe

Pas de problème pour les questions ;) Prends mes réponses avec des pincettes, y'a peut etre d'autre méthode beaucoup plus "joli" que je ne connais pas :D

Shaolan777
Shaolan777
Niveau 10
07 avril 2008 à 19:32:12

Merci beaucoup pilo, encore une fois :-)

En fait ces anims sont complètements indépendantes des modèles 3D, donc je suppose qu'il faut faire pas mal de choses pour arriver à les affecter à un modèle. Le problème est que, même en ayant Blender, je ne pense pas avoir le temps de faire ça... (j'ai 4 autres projets en parallèles). Enfin bref, vu que tu as bossé sur Cal3D, n'aurais-tu pas, par hasard, des modèles 3D de personnages plus 'normaux' que ma femme guerrière ? ^^ Là ça serait cool car je n'en trouve pas :fier:

Sinon, merci pour le lien, je lirai ça d'ici peu. En tout cas ça a l'air instructif.
Pour le paramètre de transition, je pense avoir compris. Je testerai plusieurs valeurs pour voir si le changement est bien visible.

Tiens puisque j'y suis, voici 3 captures d'écran de l'appli :
http://img246.imageshack.us/my.php?image=capture1ge9.png
Une petite vue de dessous :
http://img168.imageshack.us/my.php?image=capture2zh6.png
Et une autre vue de dessus :
http://img179.imageshack.us/my.php?image=capture3zm7.png

Comme tu peux le voir, la gestion des collisions n'est pas encore prête. D'ailleurs, j'ai vu qu'on pouvait calculer des boundingBoxes avec Cal3D. C'est bien pour les collisions ? Si oui, saurais-tu t'en servir ? :-)

Autre chose : tu as dû remarquer mes belles textures... inexistantes :rire2: Et non, je ne sais toujours pas d'où vient mon problème, je vais encore devoir chercher ^^ (pour le terrain c'est normal, ce n'est pas ma partie de TER, c'est au prof de modifier son code).

Bon ben voilà, c'est à peu près tout pour l'instant.

Par contre, j'aimerais te demander autre chose, si tu veux bien :)
Cela ne concerne pas ce TER, mais vu que tu as utilisé Cal3D dans ton TER, j'en déduis que tu as été en Master toi aussi (enfin je crois, il me semble qu'on en a qu'en Master). Et en partie en imagerie/3D. Dans ce cas, j'aurais juste voulu savoir, si c'est pas indiscret, ce que tu fais maintenant. Après tout, d'ici un an, finis les cours et je serai en stage pour 5 mois, donc j'aurais voulu d'éventuels conseils sur quoi faire ou où aller (enfin bon, en image/3D...). C'est juste pour avoir l'avis de quelqu'un étant éventuellement passé par là, ça peut toujours être utile, notamment de savoir quoi choisir ou comment procéder.
Désolé pour cette question un peu 'vague', mais bon, je suis les profs qui nous conseillent de demander à ceux qui sont passés par là.

Sur ce j'arrête de t'embêter !
... pour l'instant du moins ^^

Encore merci pour ton aide :ok:

pilo1488
pilo1488
Niveau 10
08 avril 2008 à 00:37:25

De rien pour l'aide ;) Je trouve ca assez normale de partager ce genre de chose, j'apprécie aussi beaucoup quand des gens me file des coup de main :)

Pour le problème de texture, essais de nous donner le code qui gère l'affichage (en gros tout ce qui est appel OpenGL), ca doit etre un pti truc qui deconne.

J'ais des perso si tu veux ici : http://opensvn.csie.org/OOpenFootball/data/player.blend
et plus généralement dans le sous repertoire data il y a plusieurs truc (regarde dans le repertoire Player, y'a un modèle de perso avec son squelette et anims). J'ais jamais essayé de les exporter au format cal3D, mais ca devrait marcher.

J'ais jamais utilisé les bounding box de cal3D, mais pour les collisions je ne les utiliserais pas : soit tu utilise une capsule pour tout le perso (ou meme une sphère, une ellipse), ca marche bien, soit tu fais un truc plus fin avec un "ragdoll" (pour la forme de collision, donc capsule + boite etc faut un fichier de config). La capsule ca marche super bien, c'est extrèmement rapide .

Si tu veux seulement que tes perso reste sur le terrain, tu peux bricoler un truc encore plus simple et rapide : tu calcul la hauteur sur y (l'axe qui pointe vers le haut du moins), et tu l'utilise pour la position du personnage.

Alors j'ais été en master aussi en effet, et j'avais en effet fait un TER sur l'animation des objets. Avec cal3d et avec un moteur physique (en l'occurence ODE). Mon master en revanche n'avait aucun rapport avec l'imagerie, l'intitulé était "web intelligence", et ca regroupais en gros de l'apprentissage automatique, système multi agent, et diverse technique lié au web. J'ais fais mon stage de master dans une boite de jeux video, ou (grace à mon ter) j'étais chargé de bossé sur la physique (physique de base, voiture, personnage...). Depuis... c'est compliqué lol mais plus par choix personnel que par manque d'opportunité. Si tu veux chercher du coté des jeux video, peut etre que Lapintade aura de bon tuyaux :)

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment