website logo
Auteur
avatar
Crisot

Forum » » Création-Développement » » MiniGL


Posté : 02-11-2012 14:51 icone du post

La partie que tu as montré est la seule partie capable de tracer pas mal de triangles d'un coup.

Car quand or_code==0, c'est qu'aucun point n'a été détecté hors frustum lors de la transformation => tout est tracé d'un coup.

Là où ça se complique, c'est justement sur le code qui se trouve plus bas. A partir du moment où or_code!=0 et and_code==0, ça veux dire qu'il y a des polygons dans l'écran, MAIS que certains d'entre eux sont à clipper.

C'est à ce moment préci que ça devient un massacre: MiniGL traite alors les polygons 1 par 1. Pour chaque vertex, il test le "outcode" qui a été créé aux 3 vertex lors de "v_MaybeTransform()". Si les outcode témoignent que le polygon n'est pas clippé, il le trace alors, mais SEUL. Si les outcode montrent un polygon clippé, il envoit le polygon à la fonction hc_ClipAndDrawPoly(), qui le clip avec un algo pas terrible, puis le trace, seul.

Pour en revenir à v_MaybeTransform(): A priori, c'est bel et bien cette fonction qui fait l'intégralité des transformations à l'objet, en créant au passage le "outcode" pour chaque vertex.

Pour le scissor... je ne sais plus bien pourquoi je ne m'en sert pas. Sur mon moteur perso j'ai choisi de faire le clipping moi même, mais avant les transformations. Le clipping 3D est plus lent que le clipping 2D, mais c'est tellement plus flexible. Perso, si je projète avant de clipper, je me retrouve avec des polygons projetés derrière la caméra, que je n'arrive plus à clipper correctement en 2D puisque lors coordonnées sont fausses.
--
AmigaOne X1000 - 2 Go DDR2 - Sapphire R9 280x Toxic - Crucial MX200 500 Go - Alim/Cooling BeQuiet

Message édité par : Crisot / 02-11-2012 14:52

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=965&forum=14