Conectar-se
Quem está conectado
19 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 19 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
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.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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.
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(....);
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum