Conectar-se
Quem está conectado
39 usuários online :: 2 usuários cadastrados, Nenhum Invisível e 37 Visitantes

Elvis Yakooda, Mentos e Coca-cola

Ver toda a lista


Compartilhe
Ir em baixo
avatar
Ranking : Nota A
Notas recebidas : A+A
Data de inscrição : 20/03/2010
Número de Mensagens : 1134
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 108

Prêmios
   : 1
   : 0
   : 1
Ver perfil do usuáriohttps://www.facebook.com/seito.washiro.7

Como calcular o bounding box

em Dom 15 Abr 2012, 00:04
Spoiler:

ja se passou 2 anos des da minha ultima duvida creio que ja posso perguntar algo.

eu andei tentando calcular o bounding box de uma simples sprites, mas eu devo estar calculando algo errado.
alguem ja fez algo do tipo?
pode me orientar ou me enviar um exemplo de como fez?

agradeço des de já pela ajuda Happy

bom tudo isso tem um motivo.
estou trabalhando na versão 2.0 do gmSDK.

estou realmente excitado com ele, provavelmente vai ser melhor que a ultima versão e a gmLibrary.

aqui um preview do primeiro header o d3d.h
http://dl.dropbox.com/u/61491349/Sonic.png

Obrigado a todos, o problema ja foi resolvido!

para quem tiver a mesma duvida aqui esta a solução

Código:

x1 =(sprite_width * abs(cos(degtorad(image_angle))) + sprite_height * abs(sin(degtorad(image_angle))))*-.5
x2 =(sprite_width * abs(cos(degtorad(image_angle))) + sprite_height * abs(sin(degtorad(image_angle))))*.5
y1 =(sprite_width * abs(sin(degtorad(image_angle))) + sprite_height * abs(cos(degtorad(image_angle))))*-.5
y2 =(sprite_width * abs(sin(degtorad(image_angle))) + sprite_height * abs(cos(degtorad(image_angle))))*.5
Obrigado Matheus pelas dicas.





Última edição por Jiraya em Dom 15 Abr 2012, 01:22, editado 2 vez(es)
avatar
Ranking : Nota A
Notas recebidas : B-A-A
Data de inscrição : 13/01/2010
Número de Mensagens : 1087
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 30

Prêmios
   : 2
   : 1
   : 0
Ver perfil do usuáriohttp://www.mathaeuz.deviantart.com

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 00:17
As bouding boxes são calculadas apartir do x e do y do objeto, da caixa de colisão da máscara e do centro da mesma máscara.

A bbox_left de um objeto, por exemplo, é calculada por:

x+sprite_get_bbox_left(mask_index)-sprite_get_xoffset(mask_index);

ou seja

X do objeto, mais a posição da lateral esquerda da caixa de colisão menos o centro da máscara.

O processo é repetido nas outras variáveis da caixa de colisão

x+sprite_get_bbox_right(mask_index)-sprite_get_xoffset(mask_index);

y+sprite_get_bbox_top(mask_index)-sprite_get_yoffset(mask_index);

y+sprite_get_bbox_bottom(mask_index)-sprite_get_yoffset(mask_index);


Pode verificar a igualdade de todas que dará certo, apenas lembre que mask_index não pode ser -1 ("same as sprite") nessa verificação (ele não pegará a id da sprite atual, mas tentará usar -1 para pegar as informações da máscara).


Última edição por MatheusReis em Dom 15 Abr 2012, 00:41, editado 2 vez(es)
avatar
Ranking : Nota A
Notas recebidas : A+A
Data de inscrição : 20/03/2010
Número de Mensagens : 1134
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 108

Prêmios
   : 1
   : 0
   : 1
Ver perfil do usuáriohttps://www.facebook.com/seito.washiro.7

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 00:20
obrigado!
bom eu acho que eu deveria ter exclarecido.

eu gostaria de calcular manualmente.

pq assim eu poderia usar numa dll a formula.
avatar
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6041
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 295

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 00:22
Pelo que lembro, as variáveis são:

bbox_left
bbox_top
bbox_right
bbox_bottom

Elas te darão o valor absoluto.
Ou seja, você não deve somar o x ou o y.
Ele te dará a posição que a bbox está em relação ao ponto 0 da room.

Edit: agora que o MatheusReis disse, fiquei em dúvida.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
avatar
Ranking : Nota A
Notas recebidas : B-A-A
Data de inscrição : 13/01/2010
Número de Mensagens : 1087
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 30

Prêmios
   : 2
   : 1
   : 0
Ver perfil do usuáriohttp://www.mathaeuz.deviantart.com

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 00:28
Daí você precisaria ter um modo de verificar pixel por pixel da sprite.
As bounding boxes da esquerda e do topo seriam as menores posições de pixels com alpha acima de 0 (ou da tolerância que você estabelece), e as da direita e inferior seriam as maiores.
Assim se formaria uma caixa englobando tudo 'visível' na sprite, e portanto suscetível à colisão. Se for aplicar ao 3d... é ver esses valores com os vertexes.
avatar
Ranking : Nota A
Notas recebidas : A+A
Data de inscrição : 20/03/2010
Número de Mensagens : 1134
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 108

Prêmios
   : 1
   : 0
   : 1
Ver perfil do usuáriohttps://www.facebook.com/seito.washiro.7

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 00:30
não existe uma solução matematica mais rapida ?
verificar pixel por pixel consumiria quase todo processo do jogo.
avatar
Ranking : Nota A
Notas recebidas : B-A-A
Data de inscrição : 13/01/2010
Número de Mensagens : 1087
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 30

Prêmios
   : 2
   : 1
   : 0
Ver perfil do usuáriohttp://www.mathaeuz.deviantart.com

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 00:32
Ao exemplo do GameMaker, essas bounding boxes são calculadas no momento que as sprites são importadas, e então memorizadas em variáveis. Assim no decorrer do jogo basta verificá-las. Mas não duvido que haja um método mais rápido... apenas desconheço.
avatar
Ranking : Nota A
Notas recebidas : A+A
Data de inscrição : 20/03/2010
Número de Mensagens : 1134
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 108

Prêmios
   : 1
   : 0
   : 1
Ver perfil do usuáriohttps://www.facebook.com/seito.washiro.7

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 00:48
sim, mas esse bounding box do qual vc esta se referindo é o da sprite, este é uma constante.

o qual eu preciso é variavel de acordo com o angulo

avatar
Ranking : Sem avaliações
Data de inscrição : 08/06/2008
Número de Mensagens : 2314
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 100

Prêmios
   : 3
   : 0
   : 1
Ver perfil do usuáriohttp://blackcapapps.blogspot.com.br/

Re: Como calcular o bounding box

em Dom 15 Abr 2012, 11:38
Acho que se pode usar o teorema de Pitágoras pra isso.

http://pt.wikipedia.org/wiki/Teorema_de_Pit%C3%A1goras

Ou talves calculando a area dos triangulos (sendo que um retangulo são dois triangulos).

Mas essas variáveis bbox não são constantes, essas são recalculadas quando quando alteramos image_x/yscale ou image_angle, além disso elas são relativas a posição do objeto.
Se não for para algo externo como a dll que disse, da pra fazer isso só com as bbox dentro do gm mesmo.
Teste
Código:
image_angle += 1;
draw_rectangle(bbox_left,bbox_top,bbox_right,bbox_bottom,0)
draw_sprite_ext(....);
Conteúdo patrocinado

Re: Como calcular o bounding box

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