2014-04-28 1 views
2

Partie 1:Simple plat Avion Tessellation Shader

Je veux créer un programme de tessellation de base qui prend un plan de quadriceps et la transforme en un plus, bien, plan détaillé/tessellated du quadriceps. Tels que l'image ci-dessous. Le degré de tessellation dépend des commandes de l'utilisateur, transmises par un uniforme (initialement). Cependant, je suis si nouveau pour les shaders de tessellation que je ne peux même pas comprendre comment faire cela.

Flat plane tessellation

Comment cela se fait généralement? Certes, vous ne devriez pas vraiment tirer le plan de quartes avant le programme de shaders, car de mes quadriceps compréhension ne se tessellated de cette façon, au lieu de la obtenir Tessellated dans une manière comme l'image ci-dessous:

Quad tessellation

Je crois que la réponse pourrait être de dessiner un plan de points, et ces points sont ensuite mosaïqués en plus de points, et ces points sont transformés en quads de la taille appropriée dans le geometry shader je pense? Sinon, au lieu de convertir des points en quads, pourrais-je simplement dessiner des quads entre les quatre points les plus proches (ce serait beaucoup mieux)? Des exemples très appréciés!

REMARQUE: L'utilisation GLSL> 4.0 & C seulement (N ° C++/Python)

Partie 2:

Après je reçois la partie 1 de travail, comment pourrais-je faire en sorte que certains quadriceps sont plus que d'autres en damier, comme celui-ci ?:

enter image description here

Je veux que les parties plus proches de la caméra être plus en mosaïque.

Partie 3:

Si je pouvais obtenir jusque-là, la partie suivante serait de modifier l'axe z de points pour rendre le plan dans un environnement intéressant. Ce serait fait en lisant dans un 2Dsampler, je sais comment faire ça et tout. Cependant, si je suis correct dans la partie 1 sur l'utilisation d'un plan de points, je dois faire plus que simplement modifier les points qui sont convertis en quads, car les quads doivent partager les sommets essentiellement pour qu'il n'y ait pas d'espace entre les quads. Comment cela serait-il fait? Sinon, si nous dessinons des quads entre les points, chaque point étant la hauteur approximative, alors ce ne sera pas un problème.

Répondre

0

Partie 1

Oui, vous avez raison: générer un « patch » comme une simple grille de points, spécifiez les niveaux de tesselation comme uniformes dans le TCS (shaders de contrôle de tesselation) et générer les données de sommet dans le TES (shader d'évaluation de tesselation).

Cela vous semble compliqué? Voici un tutoriel bien je basé mon travail sur: http://antongerdelan.net/opengl/tessellation.html

Partie 2

Qu'est-ce que vous parlez ici est LOD (ou niveau de détail). Vous auriez besoin de tesselate et de rendre le coin inférieur gauche de votre maillage en tant qu'objet séparé.

Votre approche suggérée est correcte: divisez la scène globale en «morceaux» et déterminez le LOD (c'est-à-dire les paramètres de tesselation) pour chaque morceau séparément, généralement par un algorithme distance-caméra.

Partie 3

Un autre excellent tutoriel qui fait exactement ce que vous êtes après que je crois: http://codeflow.org/entries/2010/nov/07/opengl-4-tessellation/

J'ai utilisé cette approche pour obtenir un très très détaillé, mais la mémoire et le cadre du terrain efficace.

Hope this helps.