Entrar
Últimos assuntos
» Problema ao entrar por uma porta e voltar por elapor 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
Página 1 de 1
[DLL]gmmd2.dll, animado e interpolado
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:
No evento Draw:
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:
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:
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.
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();
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- Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DLL]gmmd2.dll, animado e interpolado
LOL o que é quake sei la o q?
Lauro- Games Ranking :
Notas recebidas : C+D
Data de inscrição : 09/11/2010
Reputação : 11
Número de Mensagens : 855
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DLL]gmmd2.dll, animado e interpolado
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.
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- Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DLL]gmmd2.dll, animado e interpolado
Eu tenho a source dele para C++, Pode postar plints doque a DLL faz?
igort- Data de inscrição : 16/04/2011
Reputação : 0
Número de Mensagens : 44
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DLL]gmmd2.dll, animado e interpolado
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
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- Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DLL]gmmd2.dll, animado e interpolado
Link consertado. De novo.
click1024- Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DLL]gmmd2.dll, animado e interpolado
errrr
vou tentar com o IE/firefox
error escreveu:
Oops! Google Chrome could not find www.avenhym.com
Suggestions:
Search on Google:
vou tentar com o IE/firefox
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|