"Je vien de rejeter un coup d´oeil au petit landscape que tu m´avais montré.. Je vien de m´apercevoir que tu avais une gestion des LOD. "
la version publiee n´avait pas le morphing (je n´ai fait le vertes shader pour ca que plus tard) et on peut voir le "popping" sur la geometry, quand les LODs changent.
"Tu aurais pas par hasard le code source de ce petit terrain ?"
si, mais ca ne va pas bcp t´aider ; mieux vaut exposer les principes des techniques utilisees, pour que tu puisses l´implementer proprement a ta maniere.
(cherches geomorphing dans google pour des whitepapers traitant du sujet, si besoin)
"tu as bien un system de patch pour le terrain, tu regarde pas triangle par triangle si il est dans le cone de vision."
j´ai bien un systeme de patches (de 8x8 quads, si ma memoire est bonne). Mes patches sont dans un quadtree qui couvre tout le landscape : avec un culling recursif si l´arbre, il est TRES rapide de determiner quels quads sont visibles (un quad partiellement visible donnera qq triangles en dehors du frustum, mais peut importe)
"comment tu fais pour que les jointures passent nikel ? "
avant de collecter les vertices pour le rendu, tu determines les LODs de chaque patchs ; au moment de collecter les vertices, selon les voisins d´un patch, tu generes des transitions (i.e. connection pour passer de 4 triangles a 2 triangles, etc.)
pour aller plus vite, tu precalc tout ca, et pour remplir ton vertex buffer, tu ne fais que des memcpy selectifs (et utilise des primitives indexees !! ..)
"Et comment tu stock tout ce petit monde ? "
les vertices sont statiques, je les memcpy a la volee dans des VB. J´ai plusieurs sets d´indices pour chaque patch, que je copie selectivement vers des IB (selon les transitions de LOD).
Le VB unique qui sert au rendu est regenere a chaque frame, pareil pour l´IB (selon les cas, on pourrait avoir un VB static, et rendre plusieurs morceaux disjoints avec des IB adaptes)
l´idee majeure, c´est : tes vertices doivent etre pret a etre collectes, tu dois utiliser des primitives indexees si possible, la generation des VB et IB doit etre la moins couteuse possible (des memcpy depuis des blocs de "baked data" ou tout est deja pret, c´est parfait), le mecanisme de "collection" des vertices doit etre simple et efficace, le format de tes vertex doit etre le plus simple possible, quitte a equilibrer en faisant un peu plus de boulot dans les shaders (> une bonne balance CPU/GPU pour que aucun ne soit idle)