Pour info, ça a fonctionné. Il fallait que je supprime les triangles dont l'un vertex était aberrant, plutôt que de ne supprimer que le vertex.
Merci à vous.
Mais ça rame méchamment. Du type 1 image toutes les 10 secondes. (sur un I7 920 + Gtx275 : ça ne me semble pas normal)
Je pense que la routine d'affichage est foireuse, mais ce n'est pas moi qui l'ai écrit. Je vais donc galérer avant de trouver d'ou ça viens.
Il me reste une question : A l'affichage, le triangle_strip n'est pas parfait, à moins d'afficher en transparent les triangles aberrant comme vous me l'avez suggérer. Comme je ne sais pas comment afficher en transparent, j'ai tenté le triangle list.
J’obtiens 6 fois plus de vertex que de pixels. C'est normal? (Je n'ai pas l'esprit logique pour ce genre de calculs comme vous avez pus le voir, alors je préfère demander)
Résultat, le rendu est excellent, mais ça rame encore plus. Je vais tenter de passer par des tableau d'indices, mais puisque j'afficherais le même nombre de triangles, vais-je y gagner beaucoup?
aze Le 02/12/2010 à 18:31 pour rendre les points aberrants transparents, il faut que tu ajoutes une couleur à chaque vertex au moment où tu ajoutes le point dans le triangle strip.
si le point est normal, ajoute (1.0, 1.0, 1.0, 1.0) (blanc avec alpha=1), si le point est aberrant, ajoute (1.0, 1.0, 1.0, 0.0) (blanc avec alpha=0)
ensuite il faut que dans ton matériau, tu multiplies la couleur et l'alpha de la texture par la couleur des vertex et tu affiches le tout en alpha blending
ça c'est pour la théorie, j'ai jamais fait d'opengl donc je ne sais pas trop comment faut faire ça. Mais je suppose que si tu ajoutes tes points avec un genre glPoint(), tu dois pouvoir aussi ajouter une couleur avec un glColor()
Le premier ^^
En fait y'a des cas où ça peut être utile de ne pas stocker tes données en mémoire vidéo (typiquement dessiner 2-3 rectangles texturés, ou balancer des données qui varient à chaque image comme c'est le cas ici (mais ici y'a trop de points pour que ce soit un tant soit peu intéressant)) mais la façon dont OpenGL gère ça (avec 70 appels de fonction foutus en vrac) est totalement débile… Je pense que le DrawPrimitiveUP de DirectX est largement mieux fichu, tant au niveau utilisation qu'au niveau performances…
Ben le truc c'est qu'un vertex buffer (un vrai) n'a pas de format défini. Alors tu peux pas vraiment définir de méthodes précises adaptées à tous les cas.
La seule constante c'est les coordonnées du point (et encore…), mais tu peux utiliser le reste pour mettre ce que tu veux et dans le format que tu veux (dans la limite de ce que le matériel supporte) alors hmm…
(OpenGL, lui il ne connait que les trucs lié à ce que certains appellent le Fixed function Pipeline… Mais ce truc est totalement obsolète, et plus du tout en application de nos jours (émulé par le driver))
C'est le mode debug qui faisait ramer. En release c'est presque fluide.
Je n'ai pas trouvé comment forcer l’accélération matérielle avec OpenGL, j'ai l'impression qu'il n'y a pas de fonction pour ça, comme dans D3D.
aze Le 02/12/2010 à 22:37 GC> nan mais évidemment que tu peux pas tout faire avec. mais pour construire un mesh à la main, dans 99% des cas, des fonctions copiant openGL et le mode immédiat seront plus pratiques que de devoir travailler sur un buffer à coup de pointeur. Encore une fois, je ne répondais que sur le fait qu'il est mal fichu niveau utilisation.
(quel rapport avec le FFP ? et si tu veux te faire un pipeline 100% shaders, tu peux le faire en opengl, non ?)
Ben ouais mais les vestiges obsolètes du FFP que sont les glMachinTruc() (Vertex, Normal, Color, etc.) vont pas t'être très utile pour avoir un format de vertex personnalisé, non ?