Preconceptos
Ok, entonces lo que he reunido hasta ahora es esto:
- no use tubería fija (en desuso o va a estar en desuso)
- vbos almacena "modelos de objetos" (n datos de vértices, principalmente)
- los vaos describen cómo se establecen los datos para que las llamadas de sorteo sepan qué parte de cada vbo es para qué tipo de información de vértice (un vao puede referirse a múltiples vbos, lo contrario es un poco difícil)
- cada llamada de sorteo también envía datos de vértices a sombreadores
Cómo veo 3D (opcional)
Dada esta información, puedo ver cómo dibujar objetos complicados en 3D es muy agradable con OpenGL moderno. Básicamente, carga un montón de modelos de objetos (probablemente de Blender u otro software similar) en VBO con coordenadas locales, y luego simplemente proporciona para cada instancia de un objeto un parámetro de sombreado diferente (desplazamiento) para dibujar en el espacio mundial.
Problema / pregunta
Sin embargo, en 2D los problemas y las prioridades son completamente diferentes. No dibuja objetos muy complejos, no necesita matrices de proyección complicadas y los sombreadores son mucho más simples.
¿Cuál sería la mejor manera de dibujar geometría cambiante con frecuencia (realmente con frecuencia, básicamente cada cuadro) con OpenGL moderno?
En el siguiente párrafo puede ver algunas ideas de problemas (el problema del círculo y el rectángulo), que identifican mejor el tipo de cambios que me interesan.
Mis intentos (opcional)
Entonces, comencé a pensar cómo lidiaría con el dibujo de geometría 2D básica en la pantalla:
- un cuadrado: cargue un
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO para la geometría de un cuadrado en el espacio local, luego proporcione al sombreador el ancho real de las coordenadas del cuadrado y del mundo e información de color
se enfría, se ve fácil. Pasemos a un círculo:
- un círculo: abanico triangular con ... eh. ¿Cuánta precisión (número de vértices)? para círculos pequeños, la precisión debe ser pequeña y para los círculos con errores, la precisión debe ser alta. Claramente, cargar 1 VBO no puede adaptarse a todos los casos. ¿Qué sucede si necesito agregar precisión porque un círculo cambia de tamaño para ser más grande?
Menos genial Pasemos a algo un poco más fácil, un rectángulo:
- un rectángulo: eh. no hay "geometría de rectángulo general". Solo tiene una proporción ancho / alto y eso es todo, pero cada rectángulo es probablemente diferente si el tamaño cambia.
Como puede ver, las cosas van cuesta abajo desde allí. Especialmente con polígonos complejos y demás.
Sin política de código: P
Solo necesito una descripción general de la idea, no es necesario ningún código, especialmente el código C o C ++. Simplemente diga cosas como: "haga un VBO con estos datos de vértice, y luego agréguelo, ...".