Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Petite question au sujet des VertexArray et de leur formes primitives.  (Lu 3176 fois)

0 Membres et 1 Invité sur ce sujet

Varden

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Alors voila, je suis en train de m'exercer dans le domaine cité dans le titre de ce post, et je me rend compte d'une chose.
lorsque je fait ceci:
sf::VertexArray peuImporte(sf::PrimitiveType::Quads , 16);

peuimporte[0].position = sf::Vector2f(0.f,0.f);
peuimporte[1].position = sf::Vector2f(32.f,0.f);
peuimporte[2].position = sf::Vector2f(32.f,32.f);
peuimporte[3].position = sf::Vector2f(0.f,32.f);

peuimporte[4].position = sf::Vector2f(32.f,0.f);
peuimporte[5].position = sf::Vector2f(64.f,0.f);
peuimporte[6].position = sf::Vector2f(64.f,32.f);
peuimporte[7].position = sf::Vector2f(32.f,32.f);

peuimporte[8].position = sf::Vector2f(0.f,32.f);
peuimporte[9].position = sf::Vector2f(32.f,32.f);
peuimporte[10].position = sf::Vector2f(32.f,64.f);
peuimporte[11].position = sf::Vector2f(0.f,64.f);

peuimporte[12].position = sf::Vector2f(32.f,32.f);
peuimporte[13].position = sf::Vector2f(64.f,32.f);
peuimporte[14].position = sf::Vector2f(64.f,64.f);
peuimporte[15].position = sf::Vector2f(32.f,64.f);

Puis quand je dessine le tout dans ma fenetre, tout me semble normal. pourtant j'aurai penser que les quads se chevaucheraient puisqu'ils ont des vertex ayant des positions en communs. donc apparement tout se décalent automatiquement, pourtant ce n'est pas préciser dans la docs (ou je l'ai louper), et donc j'aimerai (si possible) un peu plus de détails sur le fonctionnement interne des "Vertex", "VertexArray", et des primitiveTypes, histoire de bien comprendre comment tout cela marche.

merci d'avance pour vos lumières sur ce sujet.


Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Petite question au sujet des VertexArray et de leur formes primitives.
« Réponse #1 le: Novembre 20, 2013, 03:03:08 pm »
D'après ton code les 4 quads doivent se toucher, mais pas se chevaucher.

Il faudrait que tu sois plus précis sur la description de ce que tu t'attends à voir et ce que tu obtiens.
Laurent Gomila - SFML developer

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Petite question au sujet des VertexArray et de leur formes primitives.
« Réponse #2 le: Novembre 20, 2013, 03:03:52 pm »
Je vois pas de quoi tu parles, tes 4 quads ne sont pas l'un sur l'autre, ils sont les uns à coté des autres. Je comprends pas pourquoi il y aurait besoin de les décaler.
Y'a absolument rien de différent si tu prenais une feuille de papier et dessiner tes carrés à la main non ?

Varden

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Re : Petite question au sujet des VertexArray et de leur formes primitives.
« Réponse #3 le: Novembre 20, 2013, 03:52:36 pm »
en effet ils se retrouvent l'un a coté de l'autre, pourtant lorsque je définis les positions des 4 vertex, je définis bien les 4 sommets d'un carré? donc si le sommet en haut a droite du premier carré possede la meme position que le sommet en haut a gauche du deuxieme carré, les deux sommets sont sur le meme axe... cela me semble logique. or une fois dessiner, les deux sommets sont sur des pixels différents malgré une position identique... voila d'ou vient mon interrogation.

en définitive, cela me dessine ce que je veut, mais pas comme je l'aurai penser. tentons une autre approche.

si je dessine une carré de 4x4 pixels:
x x x x
x x x x
x x x x
x x x x
le pixel en haut a gauche est a la position 0,0 et celui en haut a droite, la position 3,0.
donc si je dessine un autre carré juste a coté:
x x x x x x x x
x x x x x x x x
x x x x x x x x
x x x x x x x x
le pixel en haut a gauche du deuxieme carré se trouve a la position 4,0, et non pas 3,0.

or c'est ce qui semble etre le cas avec les quads. donc je suppose que la position du sommet ne reflete pas exactement la véritable position du pixel représentant le sommet du carré une fois dessiner.

je ne voit pas comment exposer ma question plus clairement. sans doute me manque -t-il une certaine expérience en ce domaine, expérience que vous avez et qui vous empeche de voir les choses avec mon regard, car a vos yeux tout semble normal.

en esperant avoir apporter quelques éclaircissements.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Petite question au sujet des VertexArray et de leur formes primitives.
« Réponse #4 le: Novembre 20, 2013, 04:07:16 pm »
Il ne faut pas raisonner en pixels. Sans entrer dans le détail, vois ces coordonnées comme les axes entre les pixels. Donc une même coordonnée ne signifie pas nécessairement le même pixel, seulement la même arête de pixel. Donc si pour un quad il s'agit de la coordonnée de fin et pour l'autre de la coordonnée de début, ils ne feront bien que se toucher, il n'y aura pas de chevauchement.

En pratique c'est un peu plus compliqué que ça (enfin, pas compliqué, mais disons que là j'ai pris de gros raccourcis pour expliquer). Si ça t'intéresse tu devrais regarder un peu comment fonctionne la rasterisation au niveau de la carte graphique, et plus généralement les différentes étapes du pipeline de rendu avec les différents systèmes de coordonnées associés. Ca fait partie des bases importantes à connaître, même si tu ne fais que de la 2D.
Laurent Gomila - SFML developer

Varden

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Re : Petite question au sujet des VertexArray et de leur formes primitives.
« Réponse #5 le: Novembre 20, 2013, 04:35:22 pm »
ah ta "simplification" m'éclair beaucoup. je n'avait pas penser a une coordonée "entre" pixel. ceci explique cela.

en farfouillant sur ce forum j'ai lu que les quads seraient bientot obsolète et qu'il fallait mieux utiliser les triangles. donc je m'y suis mis, mais pour créer un carré il me faut donc deux triangles rectangles. techniquement s'ils sont identiques en tailles leur hypothénuse est donc la meme pour les deux, donc chevauchement. ou bien doit-il y avoir un triangle plus petit d'un pixel?

ex:

x x x x x x x x
x x x x x x x c
x x x x x x c c
x x x x x c c c
x x x x c c c c
x x x c c c c c
x x c c c c c c
x c c c c c c c

ou bien je leur précise des sommets en communs?

je vais me renseigner sur les termes dont tu as parler, mais pourrai-tu me donner quelques mots clés plus précis (voir des liens, soyons fous) sur le sujet? je vais déja fouiller du coté de la "rastérisation au niveau de la carte graphique".

si je le pouvais j'aimerai tout apprendre mais si je réinvente la roue je ne créerai jamais rien, cependant, comprendre les mécanismes de bases m'interessent beaucoup.

merci encore pour tes réponses toujours rapides et professionnelles.

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Petite question au sujet des VertexArray et de leur formes primitives.
« Réponse #6 le: Novembre 20, 2013, 04:58:17 pm »
Les sommets de tes 2 triangles ont les mêmes positions que les sommets de ton quad.



(paint skillz)
« Modifié: Novembre 20, 2013, 05:02:43 pm par G. »

Varden

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
Re : Petite question au sujet des VertexArray et de leur formes primitives.
« Réponse #7 le: Novembre 20, 2013, 05:53:32 pm »
cela je l'ai bien compris, mais cela signifie donc qu'ils ont des pixels en communs (ceux couper par l'hypoténuse), n'est-ce pas? doit-je m'en soucier? car imaginons que je veuille appliquer une texture sur mon carré constituer de deux triangles, l'odres de dessin des triangles fera dessiner une hypothénuse sur l'autre. (je n'ai pas paint sur ubuntu, mais je vais essayer avec gimp)



triangle rouge: 0,0 ; 6,0 ; 0,6
triangle bleu: 6,0 ; 6,6 ; 0,6

si les cases sont des pixels et les lignes les coordonées de mes vertex, les pixels traverser par l'hypoténuse sont logiquement dans les deux triangles a la fois. comment est-ce que cela se passe a ce sujet? les deux triangles affichent ces pixels? car dans ce cas, si le rouge est dessiner en deuxieme, ils seront rouges, sinon ils seront bleu... voila ou est mon probleme.