M2 - Images

TP 3 - Gestion de scène, instanciation
et geometry shaders ...


Visibilité et instanciation

L'objectif du tp est d'arriver à déterminer quelles instances d'un objet sont visibles par la camera. La premiere étape consiste à utiliser un geometry shader pour calculer la visibilite de la boite englobante de chaque instance. Ensuite, il faudra "récupérer" ce résultat pour chaque instance et l'utiliser pour ne dessiner que les instances visibles. Il y a donc 2 passes successives.

La solution la plus directe consiste à utiliser un buffer d'attribut d'instances pour placer les instances dans la scène, et à construire le geometry shader pour répliquer en sortie uniquement les paramètres des instances visibles.

1. écrivez un geometry shader qui teste la visibilite de la boite englobante de chaque instance et qui copie les paramètres de l'instance en sortie.
2. enregistrer ces paramètres d'instances visibles dans un transform feedback buffer.
3. dessiner les instances visibles.


rappels :
déclarer quels varyings du shader doivent etre enregistrés dans un ou plusieurs buffers.
glTransformFeedbackVaryings( ) : il suffit de passer un tableau des noms des varyings à enregistrer.
Les varyings peuvent etre stockés de deux manières :
    soit tous dans le meme buffer, les uns à la suite des autres, bufferMode= GL_INTERLEAVED_ATTRIBS, (1 seul buffer à créer)
    soit un seul par buffer, bufferMode = GL_SEPARATE_ATTRIBS (créer un buffer par paramètre).

(re-)linker le shader program :
glLinkProgram() ou en utilisant gKit : GLShaderProgram::createGLResource() ou GLShaderProgram::link( )

configuration des buffers pour enregistrer les varyings déclarés à l'étape 1
créer autant de buffers que nécessaire :
glGenBuffers( )
glBindBuffer( )
glBufferData( ), choisir une taille suffisante pour enregistrer toutes les valeurs.

associer le/les buffers aux varyings enregistrés :
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, index, buffer) le paramètre index est l'indice du varying dans le tableau utilisé pour configurer le shader, cf étape 1.

remarques :