Estrutura de arame OpenGL


18

Não, não estou procurando glPolygonMode. Estou procurando um método, possivelmente um sombreador GLSL que produza essa estrutura de arame de estilo retro para objetos. Alguma sugestão?

Algo como Vector Tanks tinha.

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

De preferência, a solução deve funcionar no OpenGL ES 2.0 também.

Todas as dicas e sugestões (desde que não sejam NULL) são apreciadas!

Respostas:



5

Eu recomendo o uso de texturas, como Dave disse. Pode ser um pouco doloroso, mas acho que proporcionaria um desempenho muito melhor.

Você pode tentar procurar algoritmos de detecção de borda . Se você criar suas malhas usando cores de vértice com cores sólidas e valores alfa médios (para uma leve transparência) e, em seguida, usar um sombreador de detecção de arestas, poderá parecer bom o suficiente. Não seria o mesmo, mas você pode gostar ainda mais; ou talvez não.

Caso contrário, você pode estar procurando uma solução de duas passagens, desenhando polígonos translúcidos (novamente, defina as cores dos vértices para uma cor sólida com um valor alfa médio), depois defina glPolygonMode (GL_LINE) e ajuste glLineWidth conforme desejado (talvez com base no objeto distância) e desenhe os polígonos novamente.

É um pouco tarde e estou tendo dificuldades para ler isso, mas uma discussão no fórum aponta para este PDF: Renderização de estrutura de arame de passagem única . Peço desculpas se não for relevante.


+1: seria mais fácil se eu encontrasse uma maneira de gerar as texturas de alguma forma. Não é possível usar o glPolygonMode devido à segmentação posterior do OpenGL ES (iStuff).
Kornel Kisielewicz 06/09/10

2

Sei que provavelmente não é o que você procura, mas parece que o Vector Tanks usa apenas modelos texturizados. A textura dá uma aparência de armação de arame, é executada no meu iPod touch, que não suporta shaders.


Eu sei, eu sei, mas eu também poderia colar fotos de Subversion, e não usar texturas em todos (AFAIK)
kornel kisielewicz

2

A única maneira que eu vi isso foi com texturas de alta resolução e principalmente pretas, como as do Tron 2.0. Suas texturas são quase universalmente um preto liso com uma borda grossa e colorida ou uma textura simples de ruído Perlin.

Eles aplicaram algum pós-processamento simples para obter o efeito de brilho.


+1: eu conhecia o artigo, mas obrigado por lembrar - é realmente um bom artigo (e ajuda com o segundo problema que tive - brilho).
Kornel Kisielewicz 6/09

1

Você pode tentar algum tipo de função simples de distância no pixel shader. Talvez algo como coordenadas barocêntricas (armazene RGB diferente nos vértices e o rasterizador fará a maior parte do trabalho para você).

Em seguida, seu pixel shader terá as informações necessárias sobre onde está o polígono atual - perto de um vértice, perto de uma aresta ou no meio ...

Eu suspeito que, na prática, seria mais fácil texturizá-lo.


1

Que tal isso: pegue seu modelo e chanfre as arestas que deseja que apareçam como contornos. Pinte os rostos que foram criados com um verde opaco brilhante, enquanto todos os rostos antigos são de um verde translúcido escuro.

Isso não requer o uso de pixel shaders. (Na verdade, também não há texturas; apenas cores de face.) Requer algum pré-processamento de modelo da sua parte, o que pode ou não ser um problema.

Você não poderá ver o contorno quando a superfície chanfrada estiver perpendicular à vista. Se isso lhe incomoda, você pode extrudar a superfície chanfrada um pouco, colorindo a extrusão como faria com o chanfro. Você pode brincar com diferentes graus de chanfro e extrusão para criar linhas mais finas e grossas.

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.