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
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21


[DLL]gmmd2.dll, animado e interpolado

4 participantes

Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty [DLL]gmmd2.dll, animado e interpolado

Mensagem por click1024 Qua 23 Mar 2011, 17:27

Download: gmmd2.dll, exemplo.

Esta é uma demonstração de como animar um arquivo quake md2, e ele não usa a função load_frame pois ela é limitada. É importante ter importado todo os Scripts do exemplo. Embora com uma centena de vertices fique lento, com algumas dezenas pode funcionar normal dependendo da maquina.

Modelo Animado
No evento Create:
Código:
init();
load_md2("devi.md2");

num_tris= getnumtriangles();
num_frames= getnumframes();

frame= 0;
passo=0;

d3d_start();
Num_tris será o número de triangulos pré-calculados e num_frames os frames(quadros), frame o frame atual e o passo a velocidade da animação

No evento Draw:
Código:
d3d_set_projection(320+(cos(direction*pi/180)*130),240-(sin(direction*pi/180)*130),5,320,240,5,0,0,1);

draw_set_color(c_white);

d3d_transform_set_identity();
d3d_transform_set_scaling(1,1,1);
d3d_transform_set_translation(320,240,0);

//---------------------------------------------------------------------------
if ((frame < 0) || (frame > num_frames - 1))then frame=0;

tsn= 0;
d3d_primitive_begin_texture(pr_trianglelist,devi_bg)
for(i= 0;i<num_tris;i+=1)
{
  for(j=0;j<3;j+=1)
  {
      vert= facevertindx(i,j);
     
d3d_vertex_normal_texture(vertexcoord(frame,vert,0),vertexcoord(frame,vert,1),vertexcoord(frame,vert,2),facenormal(0,vert,0),facenormal(0,vert,1),facenormal(0,vert,2),texturecoord(i,j,0)/256,texturecoord(i,j,1)/256);
      tsn+= 1
     
        if (tsn==999) {
            tsn=0;
            d3d_primitive_end();
            d3d_primitive_begin_texture(pr_trianglelist,devi_bg);
        }
  }
}
d3d_primitive_end();

passo+= 1;
if (passo= 2)
{
  frame+= 1;
  passo= 0;
}

Antes da seqüencia de hifens vem comandos copiados do exemplo para esta demonstração. Abaixo o frame está dentro de seu limite, também usei a textura do exemplo(assim como o modelo). É criada uma lista de triangulos em i e seus vertices em j, vert é o indice de cada triangulo de uma lista que só a dll sabe, por fim outros comandos são usados como o mdl. O vertexcoord os vertices, facenormal os normais(provavelmente com uma lista ou calculo na dll), texturecoord o U/V de 0 a 1.
Mais abaixo fiz passo adcionar cada frame a cada dois passos e reiniciar resultando numa animação.

Interpolação
No evento Create:
Código:
init();
load_md2("devi.md2");

num_tris= getnumtriangles();
num_frames= getnumframes();

frame= 0;
//v[3]= 0;
interp=0;

ini= 0
fim= num_frames-1

d3d_start();

Ao invés de passo interp vai animar os frames, ini o frame inicial e fim o frame final. O v[3] vai armazenar os vertices interpolados.

No Draw:
Código:
d3d_set_projection(320+(cos(direction*pi/180)*130),240-(sin(direction*pi/180)*130),5,320,240,5,0,0,1);

draw_set_color(c_white);

d3d_transform_set_identity();
d3d_transform_set_scaling(1,1,1);
d3d_transform_set_translation(320,240,0);

//---------------------------------------------------------------------------
if ((frame < 0) || (frame > num_frames - 1))then frame=0;

tsn= 0;
d3d_primitive_begin_texture(pr_trianglelist,devi_bg)
for(i= 0;i<num_tris;i+=1)
{
  for(j=0;j<3;j+=1)
  {
      vert= facevertindx(i,j);
     
      v[0]= vertexcoord(frame,vert,0) + interp*(vertexcoord(frame+1,vert,0)-vertexcoord(frame,vert,0))
      v[1]= vertexcoord(frame,vert,1) + interp*(vertexcoord(frame+1,vert,1)-vertexcoord(frame,vert,1))
      v[2]= vertexcoord(frame,vert,2) + interp*(vertexcoord(frame+1,vert,2)-vertexcoord(frame,vert,2))
      d3d_vertex_normal_texture(v[0],v[1],v[2],facenormal(0,vert,0),facenormal(0,vert,1),facenormal(0,vert,2),texturecoord(i,j,0)/256,texturecoord(i,j,1)/256);
      tsn+= 1
     
        if (tsn==999) {
            tsn=0;
            d3d_primitive_end();
            d3d_primitive_begin_texture(pr_trianglelist,devi_bg);
        }
  }
}
d3d_primitive_end();
//---------------------------------------------------------------------------
interp+= .5;

if(frame< ini || frame> fim)then frame= ini;

  if(interp>= 1)
  {
      interp= 0;
      frame+= 1;
      if(frame>= fim)then frame= ini;
  }

A interpolação é uma porcentagem entre o frame atual e o proximo frame que faz o vertice se mover do atual para o proximo. O interp adcional é igual a 1/(valor por interp) neste caso 1/2. Caso fique 0,9 estraga.
Obs: O devi.md2 tem 313 vertices e fica pesado na interpolação, fiz um teste com modelo de 10 vertices e ficou mais rapido. Se for usar iluminação notará que eu não interpolei os normais.
click1024
click1024

Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por Lauro Qua 23 Mar 2011, 17:46

LOL o que é quake sei la o q?
Lauro
Lauro

Games Ranking : Nota D

Notas recebidas : C+D
Data de inscrição : 09/11/2010
Reputação : 11
Número de Mensagens : 855
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por click1024 Qua 23 Mar 2011, 19:10

já ouviu falar no quake 2?

Edit:

Link consertado: http://www.4shared.com/file/ZTf0dDXi/gmmd2exmlgm6.html

Editado por Alex FC: Usuário alertado por fazer post duplo. Posts unidos.


Última edição por click1024 em Dom 08 maio 2011, 11:29, editado 4 vez(es)
click1024
click1024

Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por igort Sex 22 Abr 2011, 11:07

Eu tenho a source dele para C++, Pode postar plints doque a DLL faz?
igort
igort

Data de inscrição : 16/04/2011
Reputação : 0
Número de Mensagens : 44
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por click1024 Sáb 07 maio 2011, 14:12

Bem, não sei se entendi bem mas o que a dll faz é carregar numeros e lista de números:

getnumtriangles()- numero total de triangulos, no cabeçalho do arquivo
getnumframes()- numero total de quadros de animação, no cabeçalho do arquivo.
facevertindx(triangulo,vertice)- lista de triangulos. Triangulo é o número do triangulo e vertice o vertice triangulo de 0 a 2. O resultado é um número da lista de vertices.
vertexcoord(frame,vertice,xyz)- lista de vertices. Frame é o quadro de animação, vertice é o resultado de facevertindx citado acima e xyz a coordenada do vertice em x,y e z. O resultado é a respectiva coordenada do vertice.
facenormal(frame,vertice,xyz)- lista dos vetores normais. Contém os mesmos argumentos da função acima. O resutado é o angulo do vetor.
texturecoord(triangulo,vertice,st ou uv)- lista de coordenada de textura. triangulo é o triangulo, vertice o vertice do triangulo e st ou uv são as coordenadas em 2d. O resultado é o numero na respectiva coordenada, s ou u(representado pelo 0) é dividido pela largura e t ou v(1) dividido pela altura.

há outros na dll:

getmagic()- idetificador do arquivo "IDP2".
getversion()- versão do arquivo que é 8.
getnumframes()- numero total de quadros de animação.
getnumtexcoords()- numero total de coordenadas de textura.

obs: todos os numeros foram convertidos para flutuante double
click1024
click1024

Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por Jiraya Sáb 07 maio 2011, 14:46

os links estão todos mortos...
pode re-uppar?
Jiraya
Jiraya

Games Ranking : Nota A

Notas recebidas : A+A
Data de inscrição : 20/03/2010
Reputação : 108
Número de Mensagens : 1134
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

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

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por click1024 Sáb 07 maio 2011, 17:24

Link consertado. De novo.
click1024
click1024

Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por Jiraya Sáb 07 maio 2011, 19:21

errrr
error escreveu:
Oops! Google Chrome could not find www.avenhym.com
Suggestions:
Search on Google:

vou tentar com o IE/firefox
Jiraya
Jiraya

Games Ranking : Nota A

Notas recebidas : A+A
Data de inscrição : 20/03/2010
Reputação : 108
Número de Mensagens : 1134
Prêmios : [DLL]gmmd2.dll, animado e interpolado Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

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

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

Ir para o topo Ir para baixo

[DLL]gmmd2.dll, animado e interpolado Empty Re: [DLL]gmmd2.dll, animado e interpolado

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


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