Author Topic: Réflexions sur le picking  (Read 4028 times)

0 Members and 1 Guest are viewing this topic.

shadow

  • Capo Regime
  • ***
  • Posts: 353
Réflexions sur le picking
« on: August 19, 2008, 09:41:25 AM »
Tout d'abord, petite remarque utile sur le picking, à propos d'un bug que je viens de résoudre dans ma démo :
-si deux modèles ont un mesh ayant le même nom, le picking foire : comme il renvoie le nom du mesh et non un id unique, si par exemple on affiche la bounding box comme dans le code sample sur le picking, on aura toujours le même mesh avec la bounding box affichée (dem prend apparemment le premier mesh qu'il a en mémoire avec le nom qu'il a trouvé).

Est-ce qu'une fonction de picking renvoyant un id unique serait faisable ?
Pour des grosses scènes, vérifier que chaque mesh a un nom unique est assez long...
(au passage, ce problème ne risque pas de causer des soucis en cas de duplication d'objet dans la scène ? Les meshes auront le même nom, non ? Du coup le picking ne marcherait pas?)

Autre souci :
Le picking se fait sur le modèle 3D et non sur le volume englobant, du coup sur du texte 3D c'est pas évident... Par exemple sur un "o" il faut viser le contour et non le centre de la lettre !
et je n'ai pas vu de fonction de picking sur les bounding box dans la doc. Si effectivement elle n'existe pas, ça pourrait être utile pour des modèles complexes comme du texte 3D.
3D, photos panoramiques : http://www.shadows.fr

Steph3D

  • Capo Regime
  • ***
  • Posts: 399
Re: Réflexions sur le picking
« Reply #1 on: August 19, 2008, 01:50:11 PM »
En même temps, c'est par ce que ta pas comprit le truc de base. En XML, le moteur ne gère pas automatiquement des id d'objets, il faut absolument que chaque noeud est un nom unique ( et pas que les mesh), suis même étonné que ça à marché la.
Dans le langage de script de C4D, c'est pareil, si je veux des ID, faut que je passe par C++

Si tu clones un objet en LUA, tu auras un ID différent si tu gères bien ton code, j'ai déjà fait un shoot qui place aléatoirement des monstres autopositionnés sur le terrain et ou on peu bien sur tiré, des clonés, j'en avais une armée ! donc pas de problème à se niveau.

Pour le piking, essaye peut être en mettant le text dans une boite invisible, je sais pas si le piking est actif en invisible, j'aimais tenté....

SPRINGER

  • Thug
  • *
  • Posts: 44
Re: Réflexions sur le picking
« Reply #2 on: August 19, 2008, 01:56:50 PM »
le picking ne semble pas fonctionner sur des primitives
 même si getPickingState() retourne 1 pour une primitive
scene.PickMesh() ne voit que des meshes...
 
On doit pouvoir remplacer  ça par du lancer de ray depuis la souris non ?

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Réflexions sur le picking
« Reply #3 on: August 19, 2008, 04:10:30 PM »
Quote
En XML, le moteur ne gère pas automatiquement des id d'objets, il faut absolument que chaque noeud est un nom unique ( et pas que les mesh), suis même étonné que ça à marché la.
En fait en XML tout est valide car j'importe des modèles, je ne me préoccupe pas des meshes qui les composent :
par exemple j'ai model.3ds, composé des meshes nommés mesh1 et de mesh2, et model2.3ds, composé des meshes nommés meshlambda et mesh1.
Si j'importe les modeles sans déclarer explicitement dans le code les sous-meshes, Demoniak ne crie pas.  :mrgreen:

Peut-être que justement il faudrait faire en sorte qu'il crie ?

Pour les primitives / volumes englobants : en fait j'avais songé à la méthode suggérée par steph, créer des cubes qui serviraient de volumes englobants (ou tout simplement les mettre plus proches de la caméra que les objets 3D) mais c'est pas super propre, comme méthode...  Je vais tenter comme ça, mais si les futures versions de Dem permettaient de faire ça sans bidouille ce serait sûrement mieux.  :mrgreen:

Quote
On doit pouvoir remplacer  ça par du lancer de ray depuis la souris non ?
Possible... mais je pense que le coup des cubes invisibles est plus simple à mettre en place ( je n'ai pas à changer mon code LUA) , donc je pense que je vais rester là-dessus...
3D, photos panoramiques : http://www.shadows.fr

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2343
    • oZone3D.Net
Re: Réflexions sur le picking
« Reply #4 on: August 19, 2008, 04:18:45 PM »
Est-ce qu'une fonction de picking renvoyant un id unique serait faisable ?
Oui c'est faisable et je vais même l'ajouter pour la prochaine release. Je me demande meme pourquoi la fonction actuelle retourne une chaine de caractères  ???  Pas grave, une nouvelle fonction pour le picking (histoire de garder la compatibilité) et hop le tour est joué  :transpi:

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Réflexions sur le picking
« Reply #5 on: August 19, 2008, 05:18:09 PM »
Merci !  :med:

Et en ce qui concerne du picking sur la bounding box d'un mesh ou model ?
3D, photos panoramiques : http://www.shadows.fr

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2343
    • oZone3D.Net
Re: Réflexions sur le picking
« Reply #6 on: August 20, 2008, 09:49:46 AM »
HYP_Scene.PickMesh() retourne maintenant le nom du mesh mais aussi son ID:

name, id = HYP_Scene.PickMesh();

id vaut -1 si pas de mesh.

Il faudrait que j'ajoute le test des bounding box un jour, ca accélérera le test...

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Réflexions sur le picking
« Reply #7 on: August 20, 2008, 10:34:45 AM »
L'idéal serait d'avoir les deux ; sur le mesh si on veut de la précision et sur la bounding box si on veut de la rapidité et surtout... moins de précision :



Là la boîte englobante ne s'affiche pas sur "launch demo" car je suis dans le trou du "e" et pas sur le mesh de la lettre... D'où l'utilisation très probable des cubes invisibles suggérés par steph.  :mrgreen:
3D, photos panoramiques : http://www.shadows.fr

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2343
    • oZone3D.Net
Re: Réflexions sur le picking
« Reply #8 on: August 20, 2008, 11:28:58 AM »
effectivement dans ce cas les boites englobantes sont necessaires  :mrgreen:

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: Réflexions sur le picking
« Reply #9 on: August 20, 2008, 01:42:41 PM »
Quote
Pour le piking, essaye peut être en mettant le text dans une boite invisible, je sais pas si le piking est actif en invisible, j'aimais tenté....
Réponse : oui !


Et hop, un menu avec des choix qui changent de taille quand on passe dessus...  :mrgreen:

(au passage, ne pas avoir mis de switch en inventant LUA est criminel  :twisted:)
3D, photos panoramiques : http://www.shadows.fr