Como os sistemas de partículas funcionam?


7

Quero implementar um sistema de partículas no meu jogo, mas nunca programei um sistema de partículas e não sei por onde começar.

Eu só quero exibir pixels GL_POINTcom tamanhos diferentes em lugares diferentes, algo como Terraria ou Minecraft quando você bate em um bloco, sem a textura. Apenas um exemplo simples e morto.

Os resultados de pesquisa do Google para isso tendem a ser muito complexos, ou não explicam os conceitos, ou são escritos em C de difícil leitura sem OOP…

Estou usando Java e OpenGL.

Respostas:


9

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:

  1. Um gerente para acompanhar todos os seus sistemas e fornecer controle global a todos os efeitos.
  2. Matriz de "pontos" onde cada um tem posição, velocidade, tempo de vida e tamanho da tela.
  3. Uma função para criar essa matriz com uma posição inicial e (provavelmente) velocidades aleatórias e tempos de vida.
  4. Uma função para executar uma simulação nessa matriz, provavelmente leva um tempo delta desde a última chamada de simulação.
  5. Uma função para assumir as posições e tamanhos de exibição e exibir no OpenGL.
  6. 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.


Obrigado pelo seu post! Agora tenho idéias claras sobre isso. Acho que darei uma pausa no tutorial do NeHe sobre sistemas de partículas.
Puyover 17/07/11

NeHe é um ótimo lugar, você não vai dar errado lá! Boa sorte.
Patrick Hughes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.