Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

[3D]Triangle ou quadrangle


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre actif
    [3D]Triangle ou quadrangle
    Bonjour,

    Je suis cette année en formation animation et modélisation 3D ; cependant j'ai quelque question par rapport à la modélisation même !

    En fait, pour une animation les triangles sont interdit ! Je suis obligé de passer par des quadrangles, pour un un jeu en 3D ; les modélisations utilise des triangles ou des quadrangles ?

    C'est une question bête mais ou je ne sait pas trouver la réponse ! Merci de votre aide ; bonne journée.
    Environment Artist | Technical Artist | Game Art
    Porfolio Art Station

  2. #2
    Expert éminent
    Les deux sont généralement supporté. Cepandant, les quads on un très gros désavantage car il oblige les trois vertex à se trouver sur le même plan. Contrairement aux triangle où les vertex sont toujours sur le même plan.

    En dehors de ça ... les deux sont utilisés .. d'ailleurs, il est très facile de transformer un quads en deux triangles (meme si il y a deux tesselations possibles)
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  3. #3
    Membre expérimenté
    Une carte 3D ne comprend que les triangles. Tout dépend du contrôle que tu veux avoir sur la triangulation.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  4. #4
    Expert confirmé
    Une carte 3D ne comprend que les triangles.
    Tu sors ça d'où ?
    En OpenGL, on utilise les polygones qu'on veut, non ?
    Boost ftw

  5. #5
    Membre éprouvé
    Citation Envoyé par loufoque Voir le message
    Tu sors ça d'où ?
    En OpenGL, on utilise les polygones qu'on veut, non ?
    Oui, mais tout est triangle pour la CG. les polygones sont redivisés en triangles de toute maniere.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  6. #6
    Rédacteur

    Tu sors ça d'où ?
    En OpenGL, on utilise les polygones qu'on veut, non ?
    Il y a une différence entre OpenGL et le GPU. D'un côté il y a une API "user-friendly", de l'autre un pipeline bien précis et optimisé. Entre les deux il y a le driver qui se débrouille pour faire communiquer les deux : en l'occurence ici, il transforme les polygones en triangles.

  7. #7
    Membre éclairé
    Citation Envoyé par raptor70 Voir le message
    Les deux sont généralement supporté. Cepandant, les quads on un très gros désavantage car il oblige les trois vertex à se trouver sur le même plan. Contrairement aux triangle où les vertex sont toujours sur le même plan.

    En dehors de ça ... les deux sont utilisés .. d'ailleurs, il est très facile de transformer un quads en deux triangles (meme si il y a deux tesselations possibles)
    Attention, il faut s'entendre sur ce qu'est un quad.

    Un quad ce n'est pas 2 triangles. Un quad c'est défini par 4 points, et ça ne représente généralement pas une surface plane.

    Si les 4 points ne sont pas coplanaires, selon la façon dont tu divises le quad en 2, ben ça ne représentera pas la même chose.

    Un triangle est toujours plan. La surface d'un triangle (A,B,C) s'écrit en coordonnées barycentriques, u.A + v.B + (1 - u - v).C avec u,v >= 0, et u + v <= 1.

    Un quad (A,B,C,D) donnés dans l'ordre trigonométrique, c'est représenté de cette manière :

    Pour 0 <= u,v <= 1, c'est l'ensemble des points qui s'écrivent :

    (1 - u).[(1 - v).A + v.B] + u.[(1-v).D + v.C]

    Comment comprendre cette formule ? On prend une interpolation linéaire entre A et B de coefficient v, de même pour D et C.
    On interpole les 2 résultats précédents avec u.

    Un quad, c'est symbolique pour OpenGL.
    Et donc ça une carte graphique ne comprend pas, on est obligé de trianguler tout le bazar pour l'afficher.
    OpenGL choisit la solution de facilité, seulement 2 triangles. En réalité il faudrait trianguler à une meilleure résolution pour des beaux résultats...

    -----------

    Pourquoi les quads ?
    - Il y a une notion de symétrie naturelle, ce qui facilite la modélisation
    - Des problèmes difficiles comme le paramétrage global, automatique et surtout PROPRE d'un maillage (en gros, c'est affecter les coordonnées de texture u,v à chaque sommet), le texturing, beaucoup d'algorithmes ne marchent qu'avec des quads.

  8. #8
    Membre actif
    Salut,

    Hum, sa m'aide pas beaucoup vos réponse, étant un noob en programamtion

    Néanmois, notre projet tournerais certainement sur Direct X via KjApi ; on réfléchie encore sur ce choix ! Le mieux sera peut être d'effectuer quelque test avec des triangles et des quadrangles alors ?
    Environment Artist | Technical Artist | Game Art
    Porfolio Art Station

  9. #9
    Rédacteur

    De toute façon ça ne change strictement rien, si ton moteur 3D est optimisé pour traiter des quads alors il les gardera tels quels, sinon il les importera en tant que triangles.

    Dans tous les cas, et quelque soit le moteur choisi, y a pas de quoi se faire un trou au cerveau avec ça

  10. #10
    Membre actif
    Ok, merci Laurent ; ravi de l'apprendre !
    Environment Artist | Technical Artist | Game Art
    Porfolio Art Station

  11. #11
    Expert confirmé
    Rien n'oblige l'implémentation d'OpenGL de tout convertir en triangles, et généraliser sur ce que fait une implémentation n'est pas nécessairement une bonne idée.

    Un quadrilatère/quadrangle (c'est la même chose) est par définition un polygone, donc dans un plan unique.
    Un quadrilatère qui n'est pas dans un même plan ce n'est plus un quadrilatère...
    Boost ftw

  12. #12
    Rédacteur

    Rien n'oblige l'implémentation d'OpenGL de tout convertir en triangles, et généraliser sur ce que fait une implémentation n'est pas nécessairement une bonne idée.
    De toute façon, ce qui se passe après l'API 3D (communication avec le driver et le GPU) est très particulier et presque pas documenté ; c'est uniquement le problème du fabriquant du chipset graphique. On ne peut donc rien affirmer de manière sûre, mais toujours est-il que vu l'architecture des cartes graphiques il serait vraiment étonnant que celles-ci traitent nativement des primitives plus compliquées que des triangles.

  13. #13
    Membre éclairé
    Citation Envoyé par loufoque Voir le message
    Rien n'oblige l'implémentation d'OpenGL de tout convertir en triangles, et généraliser sur ce que fait une implémentation n'est pas nécessairement une bonne idée.

    Un quadrilatère/quadrangle (c'est la même chose) est par définition un polygone, donc dans un plan unique.
    Un quadrilatère qui n'est pas dans un même plan ce n'est plus un quadrilatère...
    Certes, mais en infographie 3D, on considère des maillages, et les quad c'est au "sens de la théorie des graphes".

    On considère parfois et on recherche dans l'idéal à obtenir un modèle 3D qui n'est constitué que de quads.

    Or, tu te rends bien compte que dans le cas général, contraindre chaque "quad" à être plan, c'est en pratique impossible (problème surcontraint), où alors au prix d'une grosse déformation du modèle 3D.

    Mais oui je sais bien qu'un vrai quadrilatère c'est plan, et j'ai posé la question.

  14. #14
    Membre expérimenté
    Il y a bien des primitives plus complexes mais ce ne sont pas les quads/polygones. Par exemple thick lines et point sprites sont plus complexes qu'un triangle, mais ils ont la garantie d'être plan (et sont traités à part).

    Pour toutes les autres "primitives à épaisseur", il faut trianguler afin d'en tirer l'équation du plan et ce afin que le matériel de rasterisation marche. Remarque : quand on dit "la carte graphique", il faut séparer le front end (qui peut accepter les quads, polygones, strips, fans) des capacités du rasteriseur.

    On est bien d'accord qu'un quad/poly c'est plus compliqué que deux triangles. D'ailleurs il n'y a jamais une façon unique de trianguler. Et dans d3d11 on risque de revoir arriver les quads dans direct3d (comme primitive de tessellation) :
    http://developer.download.nvidia.com...008-Subdiv.pdf

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

###raw>template_hook.ano_emploi###