Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 15 sur 34

comment définir une surface dans l'espace

  1. Praesilia

    Date d'inscription
    décembre 2016
    Messages
    6

    comment définir une surface dans l'espace

    Bonjour a tous/toutes,

    Je post ici a propos d'un problème nécessitant un niveau de math bien supérieur au mien mais surement très abordable pour les lecteurs de ce forum.

    Je suis actuellement sur un projet informatique visant a coder un moteur de vue 3D mais je me trouve face a un problème:
    je ne sais pas définir mathématiquement une surface finie sans courbes, plane dans un espace a trois dimensions.

    Je sais comment obtenir l’équation d'un plan, je suis au point sur les vecteurs/produit scalaire et autre joyeuseté du début de licence (chimie, pas math pour ceux qui se demandent) mais je ne vois pas comment arrêter la surface de mon plan le long d'une ligne (le long d'une courbe je m'en fout, sauf si c'est aussi simple, mais j'en doute fortement)
    L'idée étant au final de pouvoir calculer si il y a intersection entre la surface et un vecteur, je vous serais très reconnaissant de m'aider a trouver la forme mathématique la plus adaptée a mon problème


    Merci d'avance pour votre aide !

    -----

     


    • Publicité



  2. Dlzlogic

    Date d'inscription
    juillet 2011
    Messages
    2 268

    Re : comment définir une surface dans l'espace

    Bonsoir,
    Votre question manque de précision.
    Qu'appelez_vous une surface finie ? La représentation la plus habituelle et la plus facile à utiliser est une surface constituée de triangles. Un polygone [plan] peut toujours être divisé en triangles. Si un polygone n'est pas plan, il faut le diviser en triangles. Il y a deux configurations possibles, longitudinale, comme le serait une route et centrée, comme le serait un parking de grande surface.
    Un triangle est un ensemble de trois points en XYZ défini dans un sens conventionnel. C'est à dire qu'on peut distinguer le côté pile du côté face (ou le dessus du dessous).
    Pour ce genre de représentation, une courbe est toujours transformée en polygone dont la longueur des côtés dépend de la précision voulue et de rien d'autre. Autrement dit, cette division ne concerne que la représentation.
    D'après la suite de ce que vous dites, votre préoccupation est ce qu'on appelle le problème des surfaces cachées.
    Un conseil, oubliez les notions d'équation de plan, de vecteurs etc. Ramenez tout à des triangles et traitez les triangles. C'est à dire l'objet à traiter est "le triangle". Pour faire les opérations informatiques, tous les outils sont à disposition, sauf à se focaliser sur certains.
    Par ailleurs, il existe, je suppose, des logiciels qui font ça. Telle que votre question est posée, je suppose que ce n'est pas ce que vous cherchez.
    Ce n'est pas un problème vraiment facile, ce qui est important est de partir de bonnes bases.
    Comme vous vous en doutez, j'ai développé cela, donc n'hésitez pas à poser des questions.
     

  3. Praesilia

    Date d'inscription
    décembre 2016
    Messages
    6

    Re : comment définir une surface dans l'espace

    tout d'abord, merci pour votre réponse.

    Comme vous l'avez deviné je ne cherche pas de logiciel traitant ce problème a ma place, l'idée étant de le faire moi-même

    Donc si je comprend bien, plutôt que de composer avec des surfaces de formes differentes, je compose avec des triangles définis par leurs trois extrémités ? Ca parait plus simple effectivement, mais je ne vois pas comment calculer ce que vous appelez le "problème des faces cachée".

    apres un petit tour sur wikipedia:
    https://fr.wikipedia.org/wiki/D%C3%A...s_cach%C3%A9es

    l'idée du "Viewing frustum culling" m’était déjà venue a l'esprit (pas besoin d'avoir bac+38 pour savoir qu'on ne voit pas un objet qui se trouve derrière la camera ), mais je bloque pour savoir comment un de mes triangle en cache un autre.

    Mon idée de base était:
    - Prendre un point A et le définir comme origine de la camera
    - Faire partir plusieurs vecteurs, tous d'origine A, et passant tous en un point différent d'une grille X/Y ou X = résolution largeur de l’écran et Y = résolution hauteur de l'écran.
    - vérifier quel est la première face que le vecteur croise
    - donner la couleur de cette face au point de coordonnée X/Y de la grille

    et au final on obtient une image de résolution x/y
    Petit schéma 2D pour plus de clarté:


    Image supprimée


    (un petit T fougueux est apparut a la fin d'écran, pardonnez le)

    Mais avec cette méthode il faut faire beaucoup de calcul pour tester les collision entres les vecteurs et les faces, du coup je ne sais pas si c'est très adaptée... Si vous avez mieux ( et vous avez surement mieux !) je suis preneur !
    Encore merci pour votre aide et merci d'avance pour vos réponses
    Dernière modification par JPL ; 31/03/2017 à 09h31.
     

  4. JPL

    Date d'inscription
    septembre 2003
    Messages
    68 058

    Re : comment définir une surface dans l'espace

    Les illustrations doivent être postées en pièces jointes et non sur un serveur externe. Merci.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
     

  5. Praesilia

    Date d'inscription
    décembre 2016
    Messages
    6

    Re : comment définir une surface dans l'espace

    Réupload de l'image en pièce jointe (désolé pour le doublon) Schema.png
     


    • Publicité



  6. Dlzlogic

    Date d'inscription
    juillet 2011
    Messages
    2 268

    Re : comment définir une surface dans l'espace

    Bonjour,
    J'ai lu deux thèses sur le sujet, la seconde faisant référence à la première.
    Tous les détails ne sont plus très clairs dans mon esprit. Mon programme date d'une quinzaine d'années. Je connaissais la méthode des "rayons lancés", personnellement je préfère une méthode plus pas à pas, c'est à dire que les triangles sont tels qu'il n'y a par d'intersection entre eux. Un triangle peut en cacher un autre, ou pas etc. Ce type de test est rapide. Par contre, en aucun cas tester pixel par pixel.
    Vous ne m'avez pas dit si vos objets étaient en 3D vrai, comme une pièce mécanique qui ignore la verticale, ou en 2.5D où la verticale est une réalité et où on doit en profiter.
    Pour être efficace dans les calculs, il faut, à tout instant, les faire dans un plan. Soit 2 triangles A et B, on sait qu'ils ne s'intersectent pas. Chaque triangle firme une pyramide de base A ou B et a le même sommet, la caméra. il est rapide de tester les différents cas possibles. Ponsez toujours à projeter que le plan horizontal puis sur le plan vertical, passant par la caméra.
    Petit secret, c'est l'un de mes sujets favoris, ne le répétez pas.
     

  7. Praesilia

    Date d'inscription
    décembre 2016
    Messages
    6

    Re : comment définir une surface dans l'espace

    Bonjour,
    deja un premier point pour clarifier: je n'ai rien codé, je reflechis sur papier a comment coder correctement, avant de me lancer tete baissée, donc rien n'existe

    L'idée est quand meme de creer de la 3D, pas de la 2,5D. Ce que je ne comprend pas, c'est le test specifique a effectuer entre les triangles et la camera pour savoir lequel est le plus proche. Et je ne comprend pas non plus comment retranscrire le resultat de ce calcul (C'est a dire: quel triangle est le plus proche) en affichage, sans passer par une analyse pixel par pixel.

    Si vous pouviez m'eclairer sur ces sujets je vous en serais infiniment reconnaissant.

    Merci beaucoup pour votre aide, et par avance pour l'aide que vous m'apporterez, en vous souhaitant une bonne fin de journée
     

  8. ansset

    Date d'inscription
    novembre 2009
    Localisation
    Fresnes
    Âge
    57
    Messages
    23 592

    Re : comment définir une surface dans l'espace

    c'était la base des premiers logiciels 3D : coder la vue d'un ensemble de triangles vue depuis un point fixe.
    commence par rechercher ce que donne la vue d'un seul triangle , qui est bêtement défini par 3 points qcq.
    c-a-d, que donne la projection (selon les coord sur le plan que tu choisis ) des trois points sur "l'écran" de vision en fonction de leurs coord et des angles ( vert , horiz ) de vision.(*)
    (*) tu peux aussi prendre l'angle horiz et le rapport H/L , ce qui revient au même.
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !
     

  9. minushabens

    Date d'inscription
    juillet 2014
    Messages
    5 579

    Re : comment définir une surface dans l'espace

    Il y a déjà pléthore de moteurs de rendu 3D, je ne vois pas l'intérêt d'en créer un nouveau. Mais quoi qu'il en soit, certains sont open-source et de toutes façons les algorithmes de base sont publiés. Du temps où je m'intéressais un peu à la question, un bouquin de référence était le Foley & van Dam. Mais ça doit être dépassé...
     

  10. ansset

    Date d'inscription
    novembre 2009
    Localisation
    Fresnes
    Âge
    57
    Messages
    23 592

    Re : comment définir une surface dans l'espace

    Citation Envoyé par minushabens Voir le message
    Il y a déjà pléthore de moteurs de rendu 3D, je ne vois pas l'intérêt d'en créer un nouveau. Mais quoi qu'il en soit, certains sont open-source et de toutes façons les algorithmes de base sont publiés. Du temps où je m'intéressais un peu à la question, un bouquin de référence était le Foley & van Dam. Mais ça doit être dépassé...
    ben , justement, ça me semble correspondre à la démarche initiale de Praesilia.
    les bases antiques !
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !
     

  11. Dlzlogic

    Date d'inscription
    juillet 2011
    Messages
    2 268

    Re : comment définir une surface dans l'espace

    Bonjour,
    L'idée est quand meme de creer de la 3D, pas de la 2,5D. Ce que je ne comprend pas, c'est le test specifique a effectuer entre les triangles et la camera pour savoir lequel est le plus proche. Et je ne comprend pas non plus comment retranscrire le resultat de ce calcul (C'est a dire: quel triangle est le plus proche) en affichage, sans passer par une analyse pixel par pixel.
    En fait, la seule distinction important entre 3D et 2.5D est la prise en considération de la notion de verticale et d'horizontale. Avec la 3D, cette notion n'existe pas, par ex un hélice de bateau ou un avion de voltige, par contre un ballon aura toujours sa nacelle sous le ballon. Rien n'interdit de tourner autour d'un objet mais un objet 2.5D aura toujours une verticale.

    Si vous faites un dessin avec le point de caméra et le point visé, c'est à dire le centre du rectangle correspondant à l'écran, qu'il faut comparer à une fenêtre par laquelle vous regardez et un point quelconque, cette droite va rencontrer 2 triangles. ces triangles ne se coupent pas, donc il n'y a pas de doute sur leur position relative par rapport à la caméra. Il n'y a qu'à calculer les deux distances et comparer.

    Donc, supposons que votre objet est bien divisé en triangles. Dans le cas général, ils auront deux à deux un côté commun. Chaque triangle, outre la liste des 3 points qui le constitue devra posséder des caractéristiques, par exemple l'objet auquel il appartient, sa couleur, ses voisins etc. Il faudra prévoir une caractéristique, telle "Vu à un instant donné". Quand un triangle est caché, ce ne sera plus la peine de le tester.
     

  12. LeMulet

    Date d'inscription
    septembre 2016
    Âge
    49
    Messages
    995

    Re : comment définir une surface dans l'espace

    Citation Envoyé par Praesilia
    L'idée est quand meme de creer de la 3D, pas de la 2,5D. Ce que je ne comprend pas, c'est le test spécifique a effectuer entre les triangles et la camera pour savoir lequel est le plus proche. Et je ne comprend pas non plus comment retranscrire le résultat de ce calcul (C'est a dire: quel triangle est le plus proche) en affichage, sans passer par une analyse pixel par pixel.
    La question est : Pour quoi faire ?

    Ce qu'il faut comprendre ici, c'est que le "triangle" est l'unité de base gérée par les cartes graphiques.
    Il est inutile de vouloir gérer un certain nombre de traitements, qui sont effectués à la vitesse de l'éclair (les cartes graphiques sont multiprocesseurs, multitâches, avec des algorithmes dédiés au traitement 3D).
    On appelle ça "le" GPU.
    Le CPU, lui, c'est l'ordinateur, et il faut éviter de lui faire faire des traitements inutiles (il en a déjà assez à faire, même dans une application 3D gérée par le GPU)

    Au niveau traitement GPU :
    Le triangle est "mappé" à plat sur le "plan de vue" (l'écran en gros) au niveau pixel (qui est l'unité de base d'affichage).
    Or les cartes graphiques savent décider quel pixel se trouve "au dessus" d'un autre relativement au "point de vue" gràce à un buffer de profondeur, un DEPTH BUFFER.
    Si le pixel se trouve "au dessus" d'un autre (traduisez, "derrière" relativement au point de vue) il efface le pixel invisible de la bitmap à plat (celui qu est affiché sur l'écran).

    Ceci n'est valable QUE si le pixel est opaque (3 couleurs, r,g,b) mais échoue à la tâche si le pixel est transparent (4 couleurs r,g,b,a)
    C'est dans ce cas de figure et uniquement dans ce cas de figure, que vous avez besoin de savoir quel "forme" (le triangle en occurrence ici) se trouve devant l'autre.
    Ceci afin d'envoyer les données d'affichages les triangles dans le bon ordre (du plus lointain au plus proche).
    Cette méthode n'a pas de solution générale, puisque dans le cas général les triangles peuvent se recouper et qu'il faut alors découper les trangles... l'horreur quoi. )

    De la même manière, si un triangle ne se trouve pas "dans le bon sens", comprenez par là ; que le vecteur normal au plan du triangle est dans le sens contraire à la "direction de la vue", depuis le point de vue, alors le GPU décide de ne pas traiter ni afficher le triangle (qui est une unité de base dans le traitement, comme dit précédemment).
    Ceci à condition d'avoir demandé à la carte de le faire... en openGL, on active le "Cull Face", par exemple glenable(GL_CULL_FACE).
    Donc là, attention, un triangle doit être "orienté", (sinon, vous comprenez bien qu'un triangle aurait deux vecteurs normaux possibles)

    Maintenant, pour ce qui est des traitements mathématiques, produites par le CPU (ou envoyés au GPU pour libérer le CPU mais là c'est d'un niveau de programmation assez costaud avec le langage GLSL), ils peuvent être effectivement utiles.
    Mais pas pour l'affichage à proprement parler.
    Par exemple pour décider quels sont les "primitives" (les triangles) à envoyer dans la mémoire du GPU (de manière à accélérer l'affichage), certains pouvant être hors du cadre d'affichage (derrière le point de vue, sur le côté etc)
    Ou typiquement dans une application 3D pour savoir quel objet visible est pointé si on ne veut pas pouvoir traverser les objets qui se situent sur le chemin de la vue.

    Donc comme dit : Pour quoi faire ?
    Que fait le programme ?
    A partir de là, on peut commencer à parler mathématiques et effectivement il y a de nombreuses méthodes adaptées à chaque cas.
    Bonjour, et Merci.
     

  13. ansset

    Date d'inscription
    novembre 2009
    Localisation
    Fresnes
    Âge
    57
    Messages
    23 592

    Re : comment définir une surface dans l'espace

    Citation Envoyé par Dlzlogic Voir le message
    Bonjour,
    J'ai lu deux thèses sur le sujet, la seconde faisant référence à la première.
    Tous les détails ne sont plus très clairs dans mon esprit. Mon programme date d'une quinzaine d'années. Je connaissais la méthode des "rayons lancés", personnellement je préfère une méthode plus pas à pas, c'est à dire que les triangles sont tels qu'il n'y a par d'intersection entre eux. Un triangle peut en cacher un autre, ou pas etc. Ce type de test est rapide. Par contre, en aucun cas tester pixel par pixel.
    .
    !!!! c'est pourtant à la base des logiciels , balayage en ligne et en colonne.
    me demande si tu as toi même programmé un logiciel de ce type ( ou plutôt de celui que tu proposes ).
    Cdt
    Dernière modification par ansset ; 01/04/2017 à 14h48.
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !
     

  14. ansset

    Date d'inscription
    novembre 2009
    Localisation
    Fresnes
    Âge
    57
    Messages
    23 592

    Re : comment définir une surface dans l'espace

    ps : deux triangle n'ont pas besoin de s'intersecter pour qu'une partie de l'un cache une partie de l'autre.
    y'a quelque chose qui cloche là dedans, j'y retourne immédiatement !
     

  15. Dlzlogic

    Date d'inscription
    juillet 2011
    Messages
    2 268

    Re : comment définir une surface dans l'espace

    Bonjour LeMulet,
    Par rapport à la question initiale, on a déjà bien avancé. On est parti de surface dans l'espace à triangle caché. Ne brulons pas trop vite les étapes.
    Un point important, évident, mais ça va mieux en le disant : il n'y a que les triangles qui constituent des plans. C'est à dire, sauf cas particulier, un quadrilatère dans l'espace n'est pas plan. Autre point utile à rappeler est qu'une courbe sur un écran, sera toujours un polygone.
    D'après ce que j'ai compris, Prescillia voudrait étudier les notions à la base pour être sûr de les comprendre. Et sur ce point, on ne peut que l'approuver.
     


    • Publicité







Sur le même thème :





 

Discussions similaires

  1. Définir une droite dans l'espace avec deux angles seulement ?
    Par sundry dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 25/05/2014, 13h29
  2. Réponses: 3
    Dernier message: 11/03/2012, 16h05
  3. Comment définir l'angle d'un triangle dans un cercle
    Par Whombat47 dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 12/11/2011, 15h50
  4. comment se comporte le feu dans l'espace?
    Par 1303 dans le forum Astronautique
    Réponses: 3
    Dernier message: 03/10/2007, 20h40
  5. Comment définir une fonction dans un espace courbe ?
    Par Hash dans le forum Mathématiques du supérieur
    Réponses: 22
    Dernier message: 21/07/2006, 16h31