Pregunta

Actualmente estoy usando un VBO para las coordenadas de textura, las normales y los vértices de un modelo (3DS) que estoy dibujando con '' glDrawArrays (GL_TRIANGLES, ...); ''. Para la depuración, quiero mostrar (temporalmente) las normales al dibujar mi modelo. ¿Tengo que usar el modo inmediato para dibujar cada línea de vert a vert + normal -O BIEN- rellene otro VBO con vert y vert + normal para dibujar todas las normales ... -O- hay una manera para que el sombreador de vértices use el vértice y los datos normales ya pasados ??al dibujar el modelo para calcular la V + N utilizada al dibujar los normales?

¿Fue útil?

Solución

No, no es posible dibujar líneas adicionales desde un sombreador de vértices.

Un sombreador de vértices no se trata de crear geometría, se trata de hacer cálculos por vértice. Usando sombreadores de vértices, cuando dices glDrawArrays (GL_TRIANGLES, 0,3) , esto es lo que especifica exactamente lo que dibujarás, es decir, 1 triángulo. Una vez que el procesamiento llega al sombreador de vértices, solo puede alterar las propiedades de los vértices de ese triángulo , no modificar de ninguna manera, forma o forma, la topología y / o el recuento de la geometría.

Lo que está buscando es lo que OpenGL 3.2 define como un sombreador de geometría , que permite generar un conteo / topología de geometría arbitraria de un sombreador. Sin embargo, tenga en cuenta que esto solo es compatible con OpenGL 3.2, que no hay muchas tarjetas / controladores compatibles en este momento (ha estado fuera durante unos meses).

Sin embargo, debo señalar que mostrar las normales (en la mayoría de los motores que admiten algún tipo de depuración) generalmente se realiza con la representación de línea tradicional, con un búfer de vértice adicional que se completa con las posiciones adecuadas (P, P + C * N) para cada posición de malla, donde C es una constante que representa la longitud que desea usar para mostrar las normales. No es tan complejo escribir ...

Otros consejos

Puedes aproximar esto dibujando la geometría dos veces. Una vez dibuje como lo haría normalmente. La segunda vez, dibuje la geometría como GL_POINTS y ??adjunte un sombreador de vértices que desplace cada posición de vértice por el vértice normal.

Esto daría como resultado que su modelo tenga un conjunto de puntos flotando sobre la superficie. Cada punto mostraría la dirección de la normal desde el vértice al que corresponde.

Esto no es perfecto, pero podría ser suficiente, dependiendo de para qué esperas usarlo.

ACTUALIZACIÓN: ¡AHA! Y si pasa un factor de escala constante al sombreador de vértices, y su aplicación interpola ese factor entre 0 y 1 a medida que pasa el tiempo, sus puntos representados por el sombreador de vértices se animarán con el tiempo, comenzando en el vértice al que se aplican, y luego flotando en la dirección de lo normal.

Probablemente sea posible obtener más o menos el efecto correcto con un sombreador de vértices hábilmente escrito, pero sería mucho trabajo. Como esto es para propósitos de depuración de todos modos, parece mejor dibujar algunas líneas; el rendimiento no será severo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top