Découpe d'un 'objet 3D' sous GLScene

Champy33 Messages postés 14 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 19 mai 2011 - 2 oct. 2008 à 21:40
Champy33 Messages postés 14 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 19 mai 2011 - 17 oct. 2008 à 19:35
Bonjour à tous et à toutes

Je me suis lancé dans la fabrication bénévole d'un logiciel qui servira à faire des plans de meubles au sein de l'association à laquelle j'appartiens (site : http://LesCopeaux.fr). Pour ce faire, je pense utiliser GLScene avec Delphi 7. Je l'ai déjà utilisé à un petit niveau, avec ses fonctions basiques et sans connaître trop de galères. Cependant, mon problème concerne le 'clipping' ('découpe' en français) d'un volume donné.
Imaginez un parallélepipède 'normal' auquel on souhaiterait enlever une partie, pour découper une rainure rectangulaire par exemple.
On se retrouve normalement avec un volume aux formes complexes, composé de plusieurs parallélépipèdes qu'il faut ré-assembler entre eux. Ca, c'est la solution 'besogneuse'.
Le problème, c'est qu'il existe mille manières d'usiner un bout de bois et je me vois mal en train d'implémenter 'à la main' la multitude des assemblages résultants...
Supposant que je ne suis pas le premier à connaître ce problème, j'aimerais donc, soit trouver une (des) fonction(s) qui simplifie(nt) mon travail, soit obtenir des conseils de programmation dans cette optique.

Merci beaucoup.
Champy

PS : Un détail : J'habite au milieu des vignes bordelaises et toute contribution constructive sera récompensée. En nature, évidemment... :)

8 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
3 oct. 2008 à 07:19
Bonjour

Je pense que ce n'est pas que le terme "clipping" soit correct. Ce que tu souhaites faire ressemble plutot à du "csg" (http://fr.wikipedia.org/wiki/G%C3%A9om%C3%A9trie_de_construction_de_solides). qui ne doit pas être implementé sous GLScene. Tu peux cependant utiliser OpenGL sous Delphi 7 sans passer par GLScene et utiliser alors la bibliothèque de OpenCSG (http://www.opencsg.org/)

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Champy33 Messages postés 14 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 19 mai 2011
3 oct. 2008 à 07:38
Merci WhiteHippo.
 
Vous avez raison pour le terme 'clipping' qui est mieux adapté au dessin en 2D, mais je ne savais pas trop comment décrire mon souhait.
L'important, c'est que je me sois fait comprendre... :)

Je vais étudier vos liens de plus près ce soir.

Amicalement, Champy
0
Champy33 Messages postés 14 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 19 mai 2011
4 oct. 2008 à 00:14
J'ai consulté et téléchargé les fichiers que vous m'avez précédemment indiqués. Cependant, je pense que je ne m'en sortirai pas, car tout est écrit en C++ et l'ensemble des utilitaires (librairies et autres) me semble un peu trop complexe à utiliser. De plus, il n'y a presque aucune doc, ni aucun exemples concernant l'utilisation de ces librairies. Où peut-être ne l'ai-je pas trouvée...
Il existe un volet CGS avec GLScene que je n'ai pas encore décortiqué. Je crois que je vais commencer par cet élément, qui me semble plus accessible pour me familiariser avec ce domaine.

Merci
Champy
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
4 oct. 2008 à 02:27
avec glscene il faut regarder du coté des unions/divisions de formes.

en gros, les operations booléenne sur objets 3D

<hr size="2" width="100%" />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Champy33 Messages postés 14 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 19 mai 2011
4 oct. 2008 à 14:01
Merci fOxi
En effet, c'est bien sur ce sujet que je compte m'étendre.
Un peu de doc serait quand même la bienvenue... :)

Champy
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
4 oct. 2008 à 14:27
Malheureusement, GLScene est avare en documentation. Les sujets dits classiques sont déjà peu documentés, alors les spécifiques ... 

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_louloute04 Messages postés 1 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 17 octobre 2008
17 oct. 2008 à 15:00
Bonjour,

moi j'ai utilisé des plans de clipping dans GlScene, mais ce n'était pas pour découper des objets mais pour limiter une zone de dessin d'un graphe. Je ne sais pas si ça marche pour ton cas :

Les commandes de clipping sont en OpenGl directement donc pour les activer il faut ajouter un Objet DirectOpenGl. Concretement il faut "entourer" l'objet qu'on veut "couper" entre deux objets DirectOpenGl : le premier aura pour tache d'activer le clipping et le second de le désactiver lorsqu'il n'est plus necessaire.

Exemple :

  SceneObjects
    + Cube1
    + Cube2
    + BeginClipping (TGlDirectOpenGl)
    + Sphere
    + ... (tous les objets subissant le clipping)
    + EndClipping (TGLDirectOpenGL)
    + Suite des objets ...

Que vont faire BeginClipping et EndClipping ? Il suffit de leur implémenter OnRender comme suit :

procedure TForm1.BeginClippingRender(Sender: TObject;
  var rci: TRenderContextInfo);

begin
  glClipPlane (GL_CLIP_PLANE0, @clip0);
  glEnable(GL_CLIP_PLANE0);
end;

procedure TForm1.EndClippingRender(Sender: TObject;
  var rci: TRenderContextInfo);
begin
  glDisable(GL_CLIP_PLANE0);
end;

Il ne reste plus qu'a définir les coordonnées du plan de clipping comme par exemple :

clip0 : Array [0..3] Of double = (-1.0, 0.0, 0.0, 1 / 2.0);

Les 4 paramètres sont les coordonnées de l'équation du plan :

Ax + By + Cz + D = 0

Voila.

Note : on peut définir plusieurs plan de clipping si necessaire.

var
  clip0 : Array [0..3] Of double = (-1.0, 0.0, 0.0, 1 / 2.0);
  clip1 : Array [0..3] Of double = (1.0, 0.0, 0.0, 1 / 2.0);

begin
  glClipPlane (GL_CLIP_PLANE0, @clip0);
  glClipPlane (GL_CLIP_PLANE0, @clip1);
  glEnable(GL_CLIP_PLANE0);
  glEnable(GL_CLIP_PLANE1);
0
Champy33 Messages postés 14 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 19 mai 2011
17 oct. 2008 à 19:35
Merci Louloute

Je vais essayer tout ça...

Champy
0
Rejoignez-nous