2017-06-08 3 views
0

J'essaie de traduire un code TypeScript en un vertex shader à utiliser avec WebGL. Mon but est de dessiner les lignes bitangentes de deux cercles. J'ai une fonction pour calculer les points tangents ici, https://jsfiddle.net/Zanchi/4xnp1n8x/2/ sur la ligne 27. Essentiellement, il retourne un tuple de points avec les valeurs x et y.WebGL - Définir plusieurs sommets

// First circle bottom tangent point 
const t1 = { 
    x: x1 + r1 * cos(PI/2 - alpha), 
    y: y1 + r1 * sin(PI/2 - alpha) 
}; //... and so on 

Je sais que je peux faire la calcuation en JS et transmettre les valeurs au shader via un attribut, mais j'aimerais tirer parti du GPU pour effectuer les calculs de points à la place.

Est-il possible de définir plusieurs sommets dans un même appel de vertex shader ou d'utiliser plusieurs valeurs calculées lors du premier appel du shader dans les appels suivants?

Répondre

0

Est-il possible de définir plusieurs sommets dans un appel vertex shader simple

Pas

ou utiliser plusieurs valeurs calculées dans le premier appel du shader dans les appels suivants?

Pas

A Sorties de vertex shader 1 vertex par itération/appel. Vous définissez le nombre d'itérations lorsque vous appelez gl.drawArrays (gl.drawElements est plus compliqué)

Je ne suis pas sûr que vous gagniez beaucoup en ne mettant pas simplement les valeurs dans un attribut. Il pourrait être amusant de les générer dans le vertex shader mais ce n'est probablement pas performant.

En WebGL1, il n'y a pas de moyen facile d'utiliser un vertex shader pour générer des données. Tout d'abord vous auriez besoin d'une sorte de compte ou quelque chose qui change pour chaque itération et il n'y a rien qui change si vous ne fournissez pas au moins un attribut. Vous pouvez fournir un seul attribut avec un nombre [0, 1, 2, 3, ...] et utiliser ce nombre pour générer des sommets. C'est ce que fait vertexshaderart.com mais c'est pour le plaisir, pas pour la performance.

Dans WebGL2, il y a la variable intégrée gl_VertexID, ce qui signifie que vous obtenez un compte gratuit, pas besoin de fournir un attribut. Dans WebGL2, vous pouvez également utiliser la transformation pour écrire la sortie d'un vertex shader dans un tampon. De cette façon, vous pouvez générer des sommets une fois dans un tampon, puis utiliser les sommets générés à partir de ce tampon (et donc obtenir de meilleures performances que de les générer à chaque fois).