Pergunta

Eu tenho um sistema de partículas onde as posições e várias propriedades são armazenadas em um objeto buffer de vértice. Os valores são atualizados continuamente por um kernel CUDA. Atualmente, estou apenas tornando -os usando GL_Points como círculos planos. O que estou interessado é renderizar essas partículas são mais envolvidas coisas como modelos de pássaros animados em 3D, por exemplo. Estou tentando descobrir para qual seria a melhor abordagem. Por uma questão de conversa, digamos que a animação do modelo de pássaro seja composta por 3 quadros (posição das asas e o que não)

Eu posso ver carregando os modelos em listas de exibição e loop sobre todas as partículas na tradução, girando, etc. a matriz chamando a lista de exibição. Isso não parece ser uma abordagem ideal, pois exigiria trazer todos os dados de partículas para o host da GPU apenas para fazer operações de matriz para levar de volta à GPU (a menos que eu possa chamar as funções de desenho de um kernel CUDA ?? ?)

Eu não sei muito sobre shaders, eles seriam capazes de lidar com algo assim?

Nesse ponto, estou principalmente procurando conselhos sobre o que avenue perseguir, mas se você conhece algum artigos ou tutoriais que lidem com o assunto, parabéns.


Estou trabalhando com o OpenGL nativamente no Windows 7 64bit com C ++. Eu não estou usando GLUT

Foi útil?

Solução

Você provavelmente deseja usar: ext_draw_instanced. Na verdade, nunca usei a instaização, mas a maioria das GPUs modernas (GF6 e UP, eu acho) permite que você alimente a GPU um modelo e uma lista de pontos e faça com que ela desenhe o modelo em todos os pontos.

Vou pesquisar no Google mais informações e ver o que eu inventei ....

Bem, esta é a especificação oficial, e parece que eles têm um tutorial.

http://www.opengl.org/registry/specs/arb/draw_instanced.txt

Outras dicas

Você precisará ser criativo para fazer algo assim. Se você usou o CUDA para calcular uma posição e rotação em 2 3 componentes float texturas e depois disparou um "índice" junto com cada vértice e incrementando em 1 por instância de geometria, pode escrever um shader que carregue as texturas e depois usa textura do shader de vértices Procure selecionar o pixel relevante das 2 texturas e criar uma matriz de transformação. Você então transforma os verts da malha pela matriz de transformação que você construiu.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top