Question

I ai un système de particules, où les positions et les diverses propriétés sont stockés dans un objet de mémoire tampon de sommet. Les valeurs sont continuellement mis à jour par un noyau CUDA. Actuellement, je suis en train de les rendre en utilisant GL_POINTS comme des cercles plats. Ce que je suis intéressé est rendu ces particules sont des choses plus impliqués comme modèles d'oiseaux animés 3D par exemple. Je suis en train de comprendre ce que la meilleure approche serait pour. Par souci de conversation, permet de dire que l'animation du modèle d'oiseau est composé de 3 cadres (position des ailes et ce qui ne)

Je peux voir charger les modèles dans des listes d'affichage et en boucle sur toutes les particules enTraduction, rotation, etc. la matrice puis en appelant la liste d'affichage. Cela ne semble pas une approche idéale, car elle nécessiterait apporter toutes les données de particules vers l'hôte du gpu juste pour effectuer des opérations de la matrice pour pousser vers le GPU (à moins que je peux appeler les fonctions de dessin à partir d'un noyau cuda ?? ?)

Je ne sais pas grand chose sur les shaders, seraient-ils capables de gérer quelque chose comme ça?

A ce point, je suis à la recherche principalement pour des conseils sur ce voie à suivre, mais si vous connaissez des articles ou des tutoriels qui traitent le sujet, kudos.


Je travaille avec l'OpenGL nativement sur Windows 7 64bit avec c ++. Je n'utilise pas GLUT

Était-ce utile?

La solution

Vous voulez probablement utiliser: EXT_draw_instanced. Je n'ai jamais utilisé instanciation, mais la plupart GPUS modernes (CF6 et jusqu'à je pense) vous permettre d'alimenter le GPU un modèle et une liste de points et avoir dessiner le modèle à chaque point.

Je vais google un peu plus d'informations et voir ce que je viens avec ....

Eh bien, c'est la spécification officielle, et on dirait qu'ils ont un tutoriel sur elle.

http://www.opengl.org/registry/specs/ARB /draw_instanced.txt

Autres conseils

Vous devrez faire preuve de créativité pour faire quelque chose comme ça. Si vous avez utilisé CUDA pour calculer une position et la rotation en 2 textures flotteur 3 composants, puis mis le feu d'un long « index » à chaque sommet et incrémenter par 1 par exemple de la géométrie, vous pouvez écrire un shader qui charge les textures et utilise ensuite la texture vertex shader rechercher pour sélectionner le pixel considéré à partir des 2 textures et de construire une matrice de transformation. Vous transformez ensuite les mailles du groupe Verts par la matrice de transformation que vous avez construit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top