I una aplicación para Android, quiero calcular la normalidad de una superficie de deposición en otros vértices de esta superficie. No quiero hacerlo en el programa "maestro" porque lleva mucho tiempo. En realidad para cada vértice i Pass 4 red de flotadores para cada vextex:¿Cómo acceder a otros vértices en un programa de sombreado de vértices en OpenGL es 2?
attribute vec3 a_bottom;
attribute vec3 a_left;
attribute vec3 a_right;
attribute vec3 a_top;
vec3 calculNormal() {
return normalize(cross((a_left - a_right) , (a_bottom - a_top)));
}
muy es un código muy muy sucio sé, así que en vez de pasar 4 matrices, quiero hacer eso:
vec3 calculNormal() {
vec3 a_left = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - 1 ];
vec3 a_bottom = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - X ];
...
return normalize(cross((a_left - a_right) , (a_bottom - a_top)));
}
Entonces, ¿es posible en un programa de sombreado de vértices acceder al búfer de flotación actual? ¿Hay palabras clave especiales como currentFloat? ¿O hay otra posibilidad que extraño?
Hola datenwolf. ¿Qué sucede si quiero muestrear un mapa de alturas después de crear un objeto en tiempo de ejecución? ¿Debo ejecutarlo a través de un sombreador para muestrear el mapa de alturas, transformar los vértices, enviarlos de regreso y luego subir otro VBO? No creo que muestrear una textura en la CPU sea realmente el camino, bueno, para una cosa, la textura se ha cargado usando glTexImage y la CPU realmente no la tiene. – Zebrafish
@TitoneMaurice: La pregunta original era sobre mallas genéricas. Pero los mapas de altura son un caso especial, donde la superficie normal se puede calcular usando una convolución con el núcleo correcto (diferencia discreta, también conocido como kernel de gradiente). Usando 'textureGather' (GLSL-4 y posterior) se puede obtener una cuadrícula 2 × 2 de téxeles, que es lo que necesita para eso.Sin embargo, todavía recomiendo precalcular las normales, lo que le da lo que efectivamente es un * mapa normal * para la textura. – datenwolf
@TitoneMaurice: idea de aplicación: cree un mapa de alturas a alta resolución, genere un mapa normal a partir de eso, use un mapa normal de resolución completa (en sombreador de fragmentos) para el cálculo de iluminación y un mapa de alturas muestreado para el desplazamiento de vértices. Idea adicional: puede almacenar resolución completa-normal-mapa y acceder a resolución baja LoD en la etapa de vértice y en el sombreador de fragmentos usar la diferencia entre la resolución completa y el valor de altura de vértice como entrada a un mapeo de paralaje para aumentar la calidad visual. – datenwolf