Preconceitos
Ok, então o que eu reuni até agora é o seguinte:
- não use pipeline fixo (descontinuado ou será descontinuado)
- o vbos armazena "modelos de objetos" (n dados de vértices, principalmente)
- vaos descrevem como os dados são estabelecidos para que as chamadas de chamada saibam qual parte de cada vbo é para que tipo de informação de vértice (um vao pode se referir a vários vbos, o oposto é meio difícil)
- cada chamada de desenho também envia dados de vértice para shaders
Como vejo 3D (opcional)
Dadas essas informações, posso ver como desenhar objetos complicados em 3D é muito bom com o OpenGL moderno. Você basicamente carrega vários modelos de objetos (provavelmente do Blender ou outro software similar) nos VBOs com coordenadas locais e simplesmente fornece a cada instância de um objeto um parâmetro de sombreador diferente (deslocamento) para desenhar no espaço do mundo.
Problema / pergunta
Em 2D, problemas e prioridades são completamente diferentes. Você não desenha objetos muito complexos, não precisa de matrizes de projeção complicadas e outros enfeites e shaders são muito mais simples.
Qual seria a melhor maneira de desenhar geometrias que mudam frequentemente (realmente frequentemente, basicamente todos os quadros) com o OpenGL moderno?
No parágrafo a seguir, você pode ver algumas idéias de problemas (o problema do círculo e do retângulo), que identificam melhor o tipo de mudança em que estou interessado.
Minhas tentativas (opcional)
Então, comecei a pensar em como lidaria com o desenho de geometria 2D básica na tela:
- um quadrado: carrega um
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO para a geometria de um quadrado no espaço local e, em seguida, forneça ao shader a largura real do quadrado e as coordenadas do mundo e as informações de cores
esfria, parece fácil. Vamos para um círculo:
- um círculo: ventilador triangular com ... eh. quanta precisão (número de vértices)? para pequenos círculos, a precisão deve ser pequena e, para círculos de erros, a precisão deve ser alta. O carregamento claro de 1 VBO não pode atender a todos os casos. E se eu precisar adicionar precisão porque um círculo é redimensionado para ser maior?
Menos legal. Vamos para algo um pouco mais fácil, um retângulo:
- um retângulo: eh. não há "geometria geral do retângulo". Você apenas tem uma proporção de largura / altura e é isso, mas cada retângulo provavelmente é diferente se o tamanho mudar.
Como você pode ver, as coisas vão ladeira abaixo a partir daí. Especialmente com polígonos complexos e outros enfeites.
Nenhuma política de código: P
Eu só preciso de uma visão geral da idéia, nenhum código é necessário, especialmente código C ou C ++. Apenas diga coisas como: "faça um VBO com esses dados de vértice e ligue-o, ...".