Como calcular o bounding box

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

Resolvido Como calcular o bounding box

Mensagem por Jiraya 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)

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

Mensagem por MatheusReis 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)

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

Mensagem por Jiraya 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.

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

Mensagem por PedroX 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.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

Mensagem por MatheusReis 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.

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

Mensagem por Jiraya 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.

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

Mensagem por MatheusReis 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.

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

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


Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Resolvido Re: Como calcular o bounding box

Mensagem por Kabeção 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(....);

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

Resolvido Re: Como calcular o bounding box

Mensagem por Conteúdo patrocinado Hoje à(s) 18: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