Eu acho que a frase-chave é partícula sistema de , então a maioria das amostras na natureza será mais complexa do que você imagina que uma demonstração simples deva ser. OOP realmente não entra na parte de baixo nível dos sistemas de partículas e C é muito simples de converter para outros idiomas, então eu não me preocuparia com isso.
O truque para as partículas é que você deseja exibir MUITO e o mais rápido possível, que colore os tipos de código que você verá, pois tudo é otimizado de uma maneira ou de outra.
Na sua forma mais simples, um sistema de partículas para um efeito de respingo rápido teria os seguintes elementos:
- Um gerente para acompanhar todos os seus sistemas e fornecer controle global a todos os efeitos.
- Matriz de "pontos" onde cada um tem posição, velocidade, tempo de vida e tamanho da tela.
- Uma função para criar essa matriz com uma posição inicial e (provavelmente) velocidades aleatórias e tempos de vida.
- Uma função para executar uma simulação nessa matriz, provavelmente leva um tempo delta desde a última chamada de simulação.
- Uma função para assumir as posições e tamanhos de exibição e exibir no OpenGL.
- E, finalmente, um superintendente para impedir que o sistema seja reproduzido quando todos os pontos estiverem mortos.
A organização das funções pode ser OOP nos níveis mais altos, desde que os loops internos se mantenham na busca por velocidade. Sequência super pseudo-código laxista abaixo, deixando de fora muitos detalhes e misturando e combinando conceitos C retos com um OOP brega, mas espero que faça sentido. O design da classe para isso seria uma discussão totalmente diferente =)
Para o seu exemplo, você atinge um tijolo na localização mundial (10,20,30). Você então liga para o gerente e pede para iniciar um novo sistema de partículas de pontos nesse local. O gerente então pede que o PointsClass se crie na posição (10,20,30). A classe aloca e randomiza os tempos de vida, etc ... O gerente chama todos os sistemas de partículas ativos que controla cada quadro com uma chamada de simulação. Posteriormente, esse quadro solicita que o PointsClass se atraia para um contexto GL. Loop até terminar.