ContestoWebGL - dimensioni variabili array oltre vertex shader chiamate
sto cercando di disegnare curve di Bezier in una tela. Sono riuscito a disegnare curve quadratiche e cubiche dallo shader, ma fino ad ora avevo una variabile uniforme per ogni punto di controllo.
Così, clicco sulla mia tela, aggiungo punti e quando ne ho abbastanza (rispettivamente 3 e 4), disegno la mia curva.
Ora sto cercando di generalizzare le curve di Bezier. Anche se ho raggiunto questo risultato dal lato JavaScript, ritengo che sarebbe meglio farlo dal lato dello shader, poiché la velocità del rendering sarebbe notevolmente aumentata.
Quindi, vorrei disegnare la mia curva non appena ho almeno due punti. Ma potrei continuare ad aggiungere punti e disegnare la mia curva usando ogni punto, in ordine di punti di controllo.
Spiegazione
Quindi so che non è possibile impostare una matrice dinamica in GLSL, ma è vero possibliy di dichiarare in modo dinamico una matrice GLSL basato su una variabile JS?
Se la mia domanda non è chiara (so che ho problemi a formulare le cose subito), lasciatemi spiegare con un esempio.
uniform vec2 uMyPoints[<length>];
Quindi questo è quello che vorrei realizzare, ma naturalmente, la dimensione della matrice deve essere una costante, secondo le specifiche GLSL.
Tuttavia, dal mio punto di vista, mi sento come se dovessi essere in grado di impostare length
da una variabile JS. La mia intuizione è che la dimensione dell'array in GLSL sarebbe costante per la durata dell'esecuzione dei diversi shader durante il rendering, ma potrebbe cambiare da un rendering all'altro.
Domanda
Quindi la mia domanda è: sulla base di queste, si fa a sapere nulla di buono modo o trucchi per essere impostato in grado una costante in GLSL da una variabile javascript?
Se ciò sembra possibile, questo mi sarebbe di grande aiuto. Grazie per la tua considerazione.
È un dato di confronto:?.. Come potremmo impostare "numLights" in this example da JS
risposta
stringa di sostituzione adatta alle mie esigenze ben Anche se è un po 'complicato, ma farà bene Ulteriori la ricerca mi ha portato a sapere che la dimensione implicita dell'array è disponibile Open GL ES versione 3, che dovrebbe essere utilizzata dalle future versioni di WebGL, ma non adesso
D'altra parte, il secondo suggerimento non soddisfa i miei bisogni come Volevo proprio evitare di averlo N punti nello shader, poiché tale quantità di punti può cambiare.
Grazie per la risposta;)