GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


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

4 participantes

Ir para baixo

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

Mensagem por gabrielsch 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:

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

Download:

Dropbox
Mediafire
Zippyshare
gabrielsch
gabrielsch

Games Ranking : Nota A

Notas recebidas : D + A + A
Data de inscrição : 06/12/2009
Reputação : 28
Número de Mensagens : 1230
Prêmios : [Engine] Identificação de Modelos por Surface/View Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 2 Bronze x 0

Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por theguitarmester 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
theguitarmester

Games Ranking : Nota C

Notas recebidas : B + C
Data de inscrição : 28/02/2012
Reputação : 139
Número de Mensagens : 2211
Prêmios : [Engine] Identificação de Modelos por Surface/View Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 2 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Plataformas :
  • Unity


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

Ir para o topo Ir para baixo

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

Mensagem por Kabeção 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
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [Engine] Identificação de Modelos por Surface/View Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

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

Ir para o topo Ir para baixo

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

Mensagem por All-x 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!
All-x
All-x

Games Ranking : Nota A

Notas recebidas : B A
Data de inscrição : 20/12/2008
Reputação : 189
Número de Mensagens : 2571
Prêmios : [Engine] Identificação de Modelos por Surface/View Empty

Medalhas x 0 Tutoriais x 25 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Javascript
  • C ou C++


https://redscreensoft.com

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos