Estoy intentando convertir mi programa de GLfloat a GLshort para las posiciones de los vértices y no estoy seguro de cómo representar esto en el sombreador. Estaba usando un tipo de datos vec3 en el sombreador pero vec3 representa 3 flotadores. Ahora necesito representar 3 cortos. Por lo que puedo decir, OpenGL no tiene un vector para los pantalones cortos, entonces, ¿qué se supone que debo hacer en este caso?Uso de GLshort en lugar de GLfloat para los vértices
Respuesta
No estoy seguro de cómo representar esto en el sombreado.
Esto se debe a que esta información no se encuentra en el sombreado.
Todos los valores proporcionados por glVertexAttribPointer
serán convertidos en valores GLSL de punto flotante (si no son flotadores ya). Esta conversión es esencialmente gratis. Así que usted puede utilizar cualquiera de estas definiciones glVertexAttribPointer
con un tipo de atributo 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, ...);
Todo esto se convertirá en una vec4
automáticamente. Su sombreador no tiene que saber o preocuparse de que se lo esté alimentando con pantalones cortos, bytes, enteros, flotadores, etc.
El primero se usará como está. El segundo convertirá el rango corto sin signo [0, 65535] al rango de punto flotante [0.0, 1.0]. El tercero convertirá el rango corto firmado [-32768, 32767] al rango [-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). El cuarto convertirá [-32768, 32767] a [-32768.0, 32767.0], como un rango de coma flotante.
El tipo GLSL que utiliza para los atributos solo cambia si usa glVertexAttribIPointer
o glVertexAttribLPointer
, ninguno de los cuales está disponible en OpenGL ES 2.0.
En resumen: siempre debe usar los tipos de GLSL flotantes para los atributos. OpenGL hará la conversión por usted.
- 1. Mejor algoritmo para encontrar los bordes (polígono) de los vértices
- 2. ¿Es posible acceder a todos los vértices en un polígono en un sombreado de vértices?
- 3. Modificar las propiedades de los vértices en un Boost :: Graph
- 4. Cálculo de vértices de un rectángulo girado
- 5. ¿Por qué hay GLint y GLfloat?
- 6. Colores menos de vértices
- 7. Uso de Regex para generar cadenas en lugar de combinarlas
- 8. Gráfico [] corta las etiquetas de los vértices en Mathematica
- 9. Uso de anular getPreferredSize() en lugar de utilizar setPreferredSize() para los componentes de tamaño fijo
- 10. ¿Cómo uso config.assets.precompile para directorios en lugar de archivos individuales?
- 11. C# Uso objeto en lugar de referencia para List.Contains()
- 12. OpenGL confusión búfer de vértices
- 13. ¿Cómo acceder a otros vértices en un programa de sombreado de vértices en OpenGL es 2?
- 14. Identificar vértices visibles en OpenGL
- 15. ¿Cómo quito vértices redundantes de la lista
- 16. ¿Cómo puedo especificar los colores por cara cuando uso matrices de vértices indexados en OpenGL 3.x?
- 17. Gson uso de fuerza int en lugar de la doble
- 18. Desventajas del uso de NodeJS en lugar de PHP
- 19. ¿Es posible el uso de múltiples variables en lugar de los selectores de jQuery
- 20. Uso de excepciones no controladas en lugar de Contiene()?
- 21. Dónde están los nombres de los vértices en un gráfico iGraph
- 22. Uso de toString() en lugar de constructor en JavaScript
- 23. Minimizar vértices poligonales
- 24. El uso de alloc init en lugar de nueva
- 25. Uso de cachés de texturas OpenGL ES en lugar de glReadPixels para obtener datos de textura
- 26. Uso de SQLDataReader en lugar del conjunto de registros
- 27. ¿Por qué la mayoría de los argumentos de uso de bloques para iteración continúan marcando en lugar de devolver valor?
- 28. uso de doble puntero en lugar de puntero único
- 29. Uso de singleton en lugar de una instancia global estática
- 30. tienen el uso de bundler http: en lugar de git :?
Tenía la impresión de que podía después de leer las respuestas en: http://stackoverflow.com/a/1316494/256062 y http://stackoverflow.com/a/5721102/256062 – Xavier
@Xavier: Estás perdiendo el punto. El tamaño de sus datos de vértice está definido por 'glVertexAttribPointer', * not * la variable de atributo GLSL. No * necesita * para representar componentes más pequeños en el sombreador; el hardware * convertirá * de componentes más pequeños a componentes más grandes. –
@ nicol-bolas Para tipos de datos con signo, ¿está seguro de que el rango convertido es, por ejemplo (para 'short')' [-32768, 32767] 'y no' [-32767, 32767] '? Este [artículo] (http://www.informit.com/articles/article.aspx?p=2033340&seqNum=3), supuestamente tomado del Orange Book, parece enseñar de manera diferente. Dice que la conversión es solo una división para tipos firmados. En ese caso, el valor corto '-32768' se convertiría a un valor GLSL de coma flotante' -32768/32767 = -1.000305185..'. No puedo encontrar en la especificación dónde determinar cuál es la correcta. – wil