Sto tentando di convertire il mio programma da GLfloat a GLshort per le posizioni dei vertici e non sono sicuro di come rappresentarlo nello shader. Stavo usando un tipo di dati vec3 nello shader ma vec3 rappresenta 3 float. Ora ho bisogno di rappresentare 3 cortometraggi. Per quanto posso dire, OpenGL non ha un vettore per i cortometraggi, quindi cosa dovrei fare in questo caso?Uso di GLshort invece di GLfloat per i vertici
risposta
Non sono sicuro di come rappresentare questo nello shader.
Questo perché queste informazioni non vivono nello shader.
Tutti i valori forniti da glVertexAttribPointer
sarà convertiti in valori GLSL virgola mobile (se non sono già galleggia). Questa conversione è essenzialmente gratuita. Così si può utilizzare uno di questi glVertexAttribPointer
definizioni con un tipo di attributo vec4
:
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, ...);
glVertexAttribPointer(0, 4, GL_UNSIGNED_SHORT, GL_TRUE, ...);
glVertexAttribPointer(0, 4, GL_SHORT, GL_TRUE, ...);
glVertexAttribPointer(0, 4, GL_SHORT, GL_FALSE, ...);
Tutti questi sarà convertito in un vec4
automaticamente. Il tuo shader non deve sapere né preoccuparsi che venga alimentato con corti, byte, numeri interi, galleggianti, ecc.
Il primo verrà utilizzato così com'è. Il secondo convertirà il corto raggio senza segno [0, 65535] nell'intervallo a virgola mobile [0,0, 1,0]. Il terzo convertirà la gamma breve firmata [-32768, 32767] nell'intervallo [-1,0, 1,0] (though the conversion is a bit odd and differs for certain OpenGL versions, so as to allow the integer 0 to map to the floating point 0.0). Il quarto convertirà [-32768, 32767] in [-32768.0, 32767.0], come un intervallo in virgola mobile.
Il tipo di GLSL che si utilizza per gli attributi cambia solo se si utilizza glVertexAttribIPointer
o glVertexAttribLPointer
, nessuno dei quali è disponibile in OpenGL ES 2.0.
In breve: è necessario utilizzare sempre i tipi GLSL float per gli attributi. OpenGL farà la conversione per te.
- 1. GLfloat o GLdouble di default?
- 2. Uso babel.js invece di browserify per la compilazione di bundle
- 3. hanno bundler uso http: invece di git :?
- 4. Perché c'è GLint e GLfloat?
- 5. Uso \ invece di + o << per concatenare quelle stringhe
- 6. Calcolo dei vertici di un rettangolo ruotato
- 7. R igraph rinomina i vertici
- 8. Uso di lambda invece di un oggetto funzione, cattiva prestazione
- 9. openGL di base, buffer di vertici e pyglet
- 10. Uso dei dizionari di azione invece delle istruzioni di commutazione
- 11. È possibile accedere a tutti i vertici in un poligono in uno shader di vertici?
- 12. L'ordinamento topologico tenta di ordinare i vertici oi bordi?
- 13. Programmazione lineare: trovare tutti i vertici ottimali
- 14. Algoritmo per trovare l'albero di spanning minimo dei vertici scelti
- 15. Trova il centroide di un poligono con i vertici ponderati
- 16. Modificare i vertici in un oggetto THREE.BufferGeometry
- 17. Algoritmo migliore per trovare i bordi (poligono) dei vertici
- 18. Vert.x ha concurrency reale per i singoli vertici?
- 19. Uso di libtool senza utilizzare i collegamenti
- 20. Uso rbconfig invece di obsoleti e deprecato Config
- 21. Cosa succede se uso vector :: begin() invece di std :: back_inserter (vector) per l'output di set_intersection?
- 22. Tracciare una superficie 3d in pylab dato i vertici i
- 23. Uso funzionali invece di cicli for per identificare cambiamenti sequenziali in un vettore
- 24. Set minimo di vertici che consente di raggiungere tutti gli altri vertici in max. un lato
- 25. OpenGL: attributo singolo vertice per più vertici?
- 26. ActionLink per mostrare i parametri in URL invece di querystring?
- 27. OpenCV cv2.fillPoly vs. cv2.fillConvexPoly: tipo di dati previsti per array di vertici poligono?
- 28. Come memorizzare i parametri di ridimensionamento per un uso successivo
- 29. Uso di indexOf() per confrontare i caratteri in una matrice
- 30. Uso di libcurl per caricare i file su DropBox
Ho avuto l'impressione che potevo dopo aver letto le risposte all'indirizzo: http://stackoverflow.com/a/1316494/256062 e http://stackoverflow.com/a/5721102/256062 – Xavier
@Xavier: sei manca il punto. La dimensione dei dati del vertice è definita da 'glVertexAttribPointer', * not * la variabile di attributo GLSL. Non * è necessario * per rappresentare componenti più piccoli nello shader; l'hardware * convertirà * da componenti più piccoli a quelli più grandi. –
@ nicol-bolas Per i tipi di dati firmati, sei sicuro che l'intervallo convertito sia ad esempio (per 'short')' [-32768, 32767] 'e non' [-32767, 32767] '? Questo [articolo] (http://www.informit.com/articles/article.aspx?p=2033340&seqNum=3), apparentemente tratto dal Libro arancione, sembra insegnare in modo diverso. Dice che la conversione è solo una divisione per i tipi firmati. In tal caso, il valore breve '-32768' verrebbe convertito in valore GLSL a virgola mobile' -32768/32767 = -1.000305185..'. Non riesco a trovare nelle specifiche dove determinare quale sia corretta. – wil