[Engine] Identificação de Modelos por Surface/View

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Engine] Identificação de Modelos por Surface/View

Mensagem por gabrielsch em Qua 04 Fev 2015, 05:49


Identificação de Modelos por Surface/View
Por: gabrielsch
____

Requerimento: Game Maker: Studio
Dificuldade: Avançado
____

Sobre:

Essa engine é uma solução para um problema frequente para aqueles que desejam verificar se um modelo dentro da projeção está presente em alguma coordenada da tela.
____

Como funciona?

Ela funciona de uma forma bem simples, duas views são habilitadas na room, a primeira serve para desenhar os modelos apenas com cores, a segunda e ultima serve para desenhar os modelos com suas respectivas texturas. Depois é criada uma surface que terá todo o resultado da primeira view e por tanto basta utilizar a função surface_getpixel() para obter a cor de uma determinada coordenada e pronto, já é possível saber qual modelo se encontra nela.
____

Imagens:


____

Download:

Dropbox
Mediafire
Zippyshare

___________


Acesse: http://foxen.com.br/



gabrielsch

Ranking : Nota A
Número de Mensagens : 1229
Idade : 21
Data de inscrição : 06/12/2009
Notas recebidas : D + A + A
Reputação : 28
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: [Engine] Identificação de Modelos por Surface/View

Mensagem por theguitarmester em Qua 04 Fev 2015, 09:53

E método é útil e parece funcional. Porém, me parece que usar este recurso, pode causar um pouco de atraso no jogo(lentidão).


Contudo, a um tempinho atrás, estava fazendo um sistema baseado no jogo Perspective, e no GMS, usei o draw_get_pixel no draw da GUI para pegar as cores criadas no 3D, com as texturas já aplicadas.
Talvez se voltar a mexer no sistema, vou tentar usar um método parecido ao seu. Smile
Parei de mexer devido a ficar em duvida como fazer o 'boneco' grudar na parede, e seguir o eixo Z também, algo como um point_direction3D.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Engine] Identificação de Modelos por Surface/View

Mensagem por Kabeção em Qua 04 Fev 2015, 12:33

Método interessante.
Também tive muitos problemas com isso mas agora que você pode pegar a matrix de projeção e view é fácil fazer isso usando apenas multiplicação (extremamente rápido).

Código:
// Matrices
pos = matrix_build(x, y, z, 0, 0, 0, 1, 1, 1);
projection = matrix_get(matrix_projection);
view = matrix_get(matrix_view);

// Calcular clip space
temp = matrix_multiply(view, projection);
clip = matrix_multiply(pos, temp);

// Normalizar coordenadas
nx = clip[12] / (clip[15]);  // x/w
ny = clip[13] / (clip[15]);  // y/w

// Resultado
final_x = (nx + 1) * 0.5 * view_wview;
final_y = (1 - (ny + 1) * 0.5) * view_hview;

final_x e final_y são as coordenadas na tela (desconsiderando view_xview e view_yview assim como o evento Draw Gui).
É basicamente a mesma coisa que aquele vertex shader padrão e a base dos sistemas de renderização 3D.

Você também pode facilmente descobrir se um objeto está ou não por cima de outro.
Código:
nz = clip[14] / clip[15];
depth_pos = (nz + 1) * 0.5;

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [Engine] Identificação de Modelos por Surface/View

Mensagem por Alex FC em Qua 04 Fev 2015, 12:51

Bacana demais, resolve bem o problema Very Happy

Estava usando esta técnica no meu projeto de iniciação cientifica. Mas como ela é limitada, minha orientadora me fez aprender o método que o Kabeção mostrou. No caso, a OpenGL pega o inicio e o fim do objeto.

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: [Engine] Identificação de Modelos por Surface/View

Mensagem por Conteúdo patrocinado Hoje à(s) 06:10


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum