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
» Problemas com particulas
por RastaMaan Ontem à(s) 17:03

» 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


Abrindo modelo 3d Quake *.mdl

3 participantes

Ir para baixo

Abrindo modelo 3d Quake *.mdl Empty Abrindo modelo 3d Quake *.mdl

Mensagem por click1024 Qui 24 Jun 2010, 18:02

Nome: Abrindo modelo 3d Quake *.mdl
Descrição: Modelo animado com interpolação e normais.
Nível de dificuldade: Código mediano ou avançado, funções para iniciantes.
Requerimentos: Feito no gamemaker 6.1, não testado no 6.0. Necessário versão Pro.
Desenvolvimento: Jogos 3d.

Qualidade do modelo

O código abre o MDL mais ou menos 85%, consegui desenhar a textura na tela, mas não usar como skin, e o mapeamento de textura parece mal posicionado nos ultimos 4 triangulos. O modelo pode suportar animação e vertices normais com interpolação, a textura pode ser um background interno ou externo, mas se sua maquina não tiver os requerimentos pode ser lento mesmo a 10.000 fps.

Ponto-flutuante

Alguns bytes do modelo são lidos como float 4bytes(eu converti o código em C++ para GML), então são necessárias funções para converter os bytes em ponto-flutuante. A seguir o script var_float para a conversão:

Código:
// variáveis
bit[argument0,32]= "";

result[argument0,32]= 0;
result2[argument0,32]= 0;

neg[argument0]= "";
total[argument0]= 0;
total2[argument0]= 0;
total3[argument0]= 0;
t[argument0]= 0;

n[argument0,8]= 0
expoente[argument0]= 0;
A seguir o script chr_float:
Código:
count[argument0,32]= argument1;

// processo
for (i= 1; i< 33; i+= 1)
{
  if (count[argument0,i]>= power(2,i-1))
  {
      bit[argument0,i-1]= "1";
      count[argument0,i-1]= count[argument0,i] - power(2,i-1);
      result[argument0,i-1]= power(2,(i-24)+expoente[argument0])
  }else{
      bit[argument0,i-1]= "0";
      count[argument0,i-1]= count[argument0,i];
      result[argument0,i-1]= 0;
  }
  result2[argument0,i-1]= power(2,(i-24)+expoente[argument0]);
}

/* expoente */
  if (bit[argument0,23]= "1")then n[argument0,0]= power(2,0);else n[argument0,0]= 0;
  if (bit[argument0,24]= "1")then n[argument0,1]= power(2,1);else n[argument0,1]= 0;
  if (bit[argument0,25]= "1")then n[argument0,2]= power(2,2);else n[argument0,2]= 0;
  if (bit[argument0,26]= "1")then n[argument0,3]= power(2,3);else n[argument0,3]= 0;
  if (bit[argument0,27]= "1")then n[argument0,4]= power(2,4);else n[argument0,4]= 0;
  if (bit[argument0,28]= "1")then n[argument0,5]= power(2,5);else n[argument0,5]= 0;
  if (bit[argument0,29]= "1")then n[argument0,6]= power(2,6);else n[argument0,6]= 0;
  if (bit[argument0,30]= "1")then n[argument0,7]= power(2,7);else n[argument0,7]= 0;
 
  expoente[argument0]= (n[argument0,0]+n[argument0,1]+n[argument0,2]+n[argument0,3]+n[argument0,4]+n[argument0,5]+n[argument0,6]+n[argument0,7])-127;

if (bit[argument0,31]= "1") then neg[argument0]= "-"; else neg[argument0]= "";

total[argument0]= result[argument0,0]+result[argument0,1]+result[argument0,2]+result[argument0,3]+
      result[argument0,4]+result[argument0,5]+result[argument0,6]+result[argument0,7]+
      result[argument0,8]+result[argument0,9]+result[argument0,10]+result[argument0,11]+
      result[argument0,12]+result[argument0,13]+result[argument0,14]+result[argument0,15]+
      result[argument0,16]+result[argument0,17]+result[argument0,18]+result[argument0,19]+
      result[argument0,20]+result[argument0,21]+result[argument0,22]+result2[argument0,23];

total2[argument0]= neg[argument0]+string(total[argument0]);
total3[argument0]= real(total2[argument0]);
return total3[argument0];

Mapa de cores e lista de vertices normais

Se você acha que cosegue usar a textura interna do modelo aqui vai o script colormap, cada pixel da textra equivale ao c_map(de 0 a 255):
Código:
c_map[0]= make_color(  0,  0,  0); c_map[1]= make_color( 15,  15,  15); c_map[2]= make_color( 31,  31,  31); c_map[3]= make_color( 47,  47,  47);
c_map[4]= make_color( 63,  63,  63); c_map[5]= make_color( 75,  75,  75); c_map[6]= make_color( 91,  91,  91); c_map[7]= make_color(107, 107, 107);
c_map[8]= make_color(123, 123, 123); c_map[9]= make_color(139, 139, 139); c_map[10]= make_color(155, 155, 155); c_map[11]= make_color(171, 171, 171);
c_map[12]= make_color(187, 187, 187); c_map[13]= make_color(203, 203, 203); c_map[14]= make_color(219, 219, 219); c_map[15]= make_color(235, 235, 235);
c_map[16]= make_color( 15,  11,  7); c_map[17]= make_color( 23,  15,  11); c_map[18]= make_color( 31,  23,  11); c_map[19]= make_color( 39,  27,  15);
c_map[20]= make_color( 47,  35,  19); c_map[21]= make_color( 55,  43,  23); c_map[22]= make_color( 63,  47,  23); c_map[23]= make_color( 75,  55,  27);
c_map[24]= make_color( 83,  59,  27); c_map[25]= make_color( 91,  67,  31); c_map[26]= make_color( 99,  75,  31); c_map[27]= make_color(107,  83,  31);
c_map[28]= make_color(115,  87,  31); c_map[29]= make_color(123,  95,  35); c_map[30]= make_color(131, 103,  35); c_map[31]= make_color(143, 111,  35);
c_map[32]= make_color( 11,  11,  15); c_map[33]= make_color( 19,  19,  27); c_map[34]= make_color( 27,  27,  39); c_map[35]= make_color( 39,  39,  51);
c_map[36]= make_color( 47,  47,  63); c_map[37]= make_color( 55,  55,  75); c_map[38]= make_color( 63,  63,  87); c_map[39]= make_color( 71,  71, 103);
c_map[40]= make_color( 79,  79, 115); c_map[41]= make_color( 91,  91, 127); c_map[42]= make_color( 99,  99, 139); c_map[43]= make_color(107, 107, 151);
c_map[44]= make_color(115, 115, 163); c_map[45]= make_color(123, 123, 175); c_map[46]= make_color(131, 131, 187); c_map[47]= make_color(139, 139, 203);
c_map[48]= make_color(  0,  0,  0); c_map[49]= make_color(  7,  7,  0); c_map[50]= make_color( 11,  11,  0); c_map[51]= make_color( 19,  19,  0);
c_map[52]= make_color( 27,  27,  0); c_map[53]= make_color( 35,  35,  0); c_map[54]= make_color( 43,  43,  7); c_map[55]= make_color( 47,  47,  7);
c_map[56]= make_color( 55,  55,  7); c_map[57]= make_color( 63,  63,  7); c_map[58]= make_color( 71,  71,  7); c_map[59]= make_color( 75,  75,  11);
c_map[60]= make_color( 83,  83,  11); c_map[61]= make_color( 91,  91,  11); c_map[62]= make_color( 99,  99,  11); c_map[63]= make_color(107, 107,  15);
c_map[64]= make_color(  7,  0,  0); c_map[65]= make_color( 15,  0,  0); c_map[66]= make_color( 23,  0,  0); c_map[67]= make_color( 31,  0,  0);
c_map[68]= make_color( 39,  0,  0); c_map[69]= make_color( 47,  0,  0); c_map[70]= make_color( 55,  0,  0); c_map[71]= make_color( 63,  0,  0);
c_map[72]= make_color( 71,  0,  0); c_map[73]= make_color( 79,  0,  0); c_map[74]= make_color( 87,  0,  0); c_map[75]= make_color( 95,  0,  0);
c_map[76]= make_color(103,  0,  0); c_map[77]= make_color(111,  0,  0); c_map[78]= make_color(119,  0,  0); c_map[79]= make_color(127,  0,  0);
c_map[80]= make_color( 19,  19,  0); c_map[81]= make_color( 27,  27,  0); c_map[82]= make_color( 35,  35,  0); c_map[83]= make_color( 47,  43,  0);
c_map[84]= make_color( 55,  47,  0); c_map[85]= make_color( 67,  55,  0); c_map[86]= make_color( 75,  59,  7); c_map[87]= make_color( 87,  67,  7);
c_map[88]= make_color( 95,  71,  7); c_map[89]= make_color(107,  75,  11); c_map[90]= make_color(119,  83,  15); c_map[91]= make_color(131,  87,  19);
c_map[92]= make_color(139,  91,  19); c_map[93]= make_color(151,  95,  27); c_map[94]= make_color(163,  99,  31); c_map[95]= make_color(175, 103,  35);
c_map[96]= make_color( 35,  19,  7); c_map[97]= make_color( 47,  23,  11); c_map[98]= make_color( 59,  31,  15); c_map[99]= make_color( 75,  35,  19);
c_map[100]= make_color( 87,  43,  23); c_map[101]= make_color( 99,  47,  31); c_map[102]= make_color(115,  55,  35); c_map[103]= make_color(127,  59,  43);
c_map[104]= make_color(143,  67,  51); c_map[105]= make_color(159,  79,  51); c_map[106]= make_color(175,  99,  47); c_map[107]= make_color(191, 119,  47);
c_map[108]= make_color(207, 143,  43); c_map[109]= make_color(223, 171,  39); c_map[110]= make_color(239, 203,  31); c_map[111]= make_color(255, 243,  27);
c_map[112]= make_color( 11,  7,  0); c_map[113]= make_color( 27,  19,  0); c_map[114]= make_color( 43,  35,  15); c_map[115]= make_color( 55,  43,  19);
c_map[116]= make_color( 71,  51,  27); c_map[117]= make_color( 83,  55,  35); c_map[118]= make_color( 99,  63,  43); c_map[119]= make_color(111,  71,  51);
c_map[120]= make_color(127,  83,  63); c_map[121]= make_color(139,  95,  71); c_map[122]= make_color(155, 107,  83); c_map[123]= make_color(167, 123,  95);
c_map[124]= make_color(183, 135, 107); c_map[125]= make_color(195, 147, 123); c_map[126]= make_color(211, 163, 139); c_map[127]= make_color(227, 179, 151);
c_map[128]= make_color(171, 139, 163); c_map[129]= make_color(159, 127, 151); c_map[130]= make_color(147, 115, 135); c_map[131]= make_color(139, 103, 123);
c_map[132]= make_color(127,  91, 111); c_map[133]= make_color(119,  83,  99); c_map[134]= make_color(107,  75,  87); c_map[135]= make_color( 95,  63,  75);
c_map[136]= make_color( 87,  55,  67); c_map[137]= make_color( 75,  47,  55); c_map[138]= make_color( 67,  39,  47); c_map[139]= make_color( 55,  31,  35);
c_map[140]= make_color( 43,  23,  27); c_map[141]= make_color( 35,  19,  19); c_map[142]= make_color( 23,  11,  11); c_map[143]= make_color( 15,  7,  7);
c_map[144]= make_color(187, 115, 159); c_map[145]= make_color(175, 107, 143); c_map[146]= make_color(163,  95, 131); c_map[147]= make_color(151,  87, 119);
c_map[148]= make_color(139,  79, 107); c_map[149]= make_color(127,  75,  95); c_map[150]= make_color(115,  67,  83); c_map[151]= make_color(107,  59,  75);
c_map[152]= make_color( 95,  51,  63); c_map[153]= make_color( 83,  43,  55); c_map[154]= make_color( 71,  35,  43); c_map[155]= make_color( 59,  31,  35);
c_map[156]= make_color( 47,  23,  27); c_map[157]= make_color( 35,  19,  19); c_map[158]= make_color( 23,  11,  11); c_map[159]= make_color( 15,  7,  7);
c_map[160]= make_color(219, 195, 187); c_map[161]= make_color(203, 179, 167); c_map[162]= make_color(191, 163, 155); c_map[163]= make_color(175, 151, 139);
c_map[164]= make_color(163, 135, 123); c_map[165]= make_color(151, 123, 111); c_map[166]= make_color(135, 111,  95); c_map[167]= make_color(123,  99,  83);
c_map[168]= make_color(107,  87,  71); c_map[169]= make_color( 95,  75,  59); c_map[170]= make_color( 83,  63,  51); c_map[171]= make_color( 67,  51,  39);
c_map[172]= make_color( 55,  43,  31); c_map[173]= make_color( 39,  31,  23); c_map[174]= make_color( 27,  19,  15); c_map[175]= make_color( 15,  11,  7);
c_map[176]= make_color(111, 131, 123); c_map[177]= make_color(103, 123, 111); c_map[178]= make_color( 95, 115, 103); c_map[179]= make_color( 87, 107,  95);
c_map[180]= make_color( 79,  99,  87); c_map[181]= make_color( 71,  91,  79); c_map[182]= make_color( 63,  83,  71); c_map[183]= make_color( 55,  75,  63);
c_map[184]= make_color( 47,  67,  55); c_map[185]= make_color( 43,  59,  47); c_map[186]= make_color( 35,  51,  39); c_map[187]= make_color( 31,  43,  31);
c_map[188]= make_color( 23,  35,  23); c_map[189]= make_color( 15,  27,  19); c_map[190]= make_color( 11,  19,  11); c_map[191]= make_color(  7,  11,  7);
c_map[192]= make_color(255, 243,  27); c_map[193]= make_color(239, 223,  23); c_map[194]= make_color(219, 203,  19); c_map[195]= make_color(203, 183,  15);
c_map[196]= make_color(187, 167,  15); c_map[197]= make_color(171, 151,  11); c_map[198]= make_color(155, 131,  7); c_map[199]= make_color(139, 115,  7);
c_map[200]= make_color(123,  99,  7); c_map[201]= make_color(107,  83,  0); c_map[202]= make_color( 91,  71,  0); c_map[203]= make_color( 75,  55,  0);
c_map[204]= make_color( 59,  43,  0); c_map[205]= make_color( 43,  31,  0); c_map[206]= make_color( 27,  15,  0); c_map[207]= make_color( 11,  7,  0);
c_map[208]= make_color(  0,  0, 255); c_map[209]= make_color( 11,  11, 239); c_map[210]= make_color( 19,  19, 223); c_map[211]= make_color( 27,  27, 207);
c_map[212]= make_color( 35,  35, 191); c_map[213]= make_color( 43,  43, 175); c_map[214]= make_color( 47,  47, 159); c_map[215]= make_color( 47,  47, 143);
c_map[216]= make_color( 47,  47, 127); c_map[217]= make_color( 47,  47, 111); c_map[218]= make_color( 47,  47,  95); c_map[219]= make_color( 43,  43,  79);
c_map[220]= make_color( 35,  35,  63); c_map[221]= make_color( 27,  27,  47); c_map[222]= make_color( 19,  19,  31); c_map[223]= make_color( 11,  11,  15);
c_map[224]= make_color( 43,  0,  0); c_map[225]= make_color( 59,  0,  0); c_map[226]= make_color( 75,  7,  0); c_map[227]= make_color( 95,  7,  0);
c_map[228]= make_color(111,  15,  0); c_map[229]= make_color(127,  23,  7); c_map[230]= make_color(147,  31,  7); c_map[231]= make_color(163,  39,  11);
c_map[232]= make_color(183,  51,  15); c_map[233]= make_color(195,  75,  27); c_map[234]= make_color(207,  99,  43); c_map[235]= make_color(219, 127,  59);
c_map[236]= make_color(227, 151,  79); c_map[237]= make_color(231, 171,  95); c_map[238]= make_color(239, 191, 119); c_map[239]= make_color(247, 211, 139);
c_map[240]= make_color(167, 123,  59); c_map[241]= make_color(183, 155,  55); c_map[242]= make_color(199, 195,  55); c_map[243]= make_color(231, 227,  87);
c_map[244]= make_color(127, 191, 255); c_map[245]= make_color(171, 231, 255); c_map[246]= make_color(215, 255, 255); c_map[247]= make_color(103,  0,  0);
c_map[248]= make_color(139,  0,  0); c_map[249]= make_color(179,  0,  0); c_map[250]= make_color(215,  0,  0); c_map[251]= make_color(255,  0,  0);
c_map[252]= make_color(255, 243, 147); c_map[253]= make_color(255, 247, 199); c_map[254]= make_color(255, 255, 255); c_map[255]= make_color(159,  91,  83);
A próxima lista é o script anorms para as luzes e sombras:
Código:
anorms_table[0]= -0.525731; anorms_table[1]=  0.000000; anorms_table[2]=  0.850651;
anorms_table[3]= -0.442863; anorms_table[4]=  0.238856; anorms_table[5]=  0.864188;
anorms_table[6]= -0.295242; anorms_table[7]=  0.000000; anorms_table[8]=  0.955423;
anorms_table[9]= -0.309017; anorms_table[10]=  0.500000; anorms_table[11]=  0.809017;
anorms_table[12]= -0.162460; anorms_table[13]=  0.262866; anorms_table[14]=  0.951056;
anorms_table[15]=  0.000000; anorms_table[16]=  0.000000; anorms_table[17]=  1.000000;
anorms_table[18]=  0.000000; anorms_table[19]=  0.850651; anorms_table[20]=  0.525731;
anorms_table[21]= -0.147621; anorms_table[22]=  0.716567; anorms_table[23]=  0.681718;
anorms_table[24]=  0.147621; anorms_table[25]=  0.716567; anorms_table[26]=  0.681718;
anorms_table[27]=  0.000000; anorms_table[28]=  0.525731; anorms_table[29]=  0.850651;
anorms_table[30]=  0.309017; anorms_table[31]=  0.500000; anorms_table[32]=  0.809017;
anorms_table[33]=  0.525731; anorms_table[34]=  0.000000; anorms_table[35]=  0.850651;
anorms_table[36]=  0.295242; anorms_table[37]=  0.000000; anorms_table[38]=  0.955423;
anorms_table[39]=  0.442863; anorms_table[40]=  0.238856; anorms_table[41]=  0.864188;
anorms_table[42]=  0.162460; anorms_table[43]=  0.262866; anorms_table[44]=  0.951056;
anorms_table[45]= -0.681718; anorms_table[46]=  0.147621; anorms_table[47]=  0.716567;
anorms_table[48]= -0.809017; anorms_table[49]=  0.309017; anorms_table[50]=  0.500000;
anorms_table[51]= -0.587785; anorms_table[52]=  0.425325; anorms_table[53]=  0.688191;
anorms_table[54]= -0.850651; anorms_table[55]=  0.525731; anorms_table[56]=  0.000000;
anorms_table[57]= -0.864188; anorms_table[58]=  0.442863; anorms_table[59]=  0.238856;
anorms_table[60]= -0.716567; anorms_table[61]=  0.681718; anorms_table[62]=  0.147621;
anorms_table[63]= -0.688191; anorms_table[64]=  0.587785; anorms_table[65]=  0.425325;
anorms_table[66]= -0.500000; anorms_table[67]=  0.809017; anorms_table[68]=  0.309017;
anorms_table[69]= -0.238856; anorms_table[70]=  0.864188; anorms_table[71]=  0.442863;
anorms_table[72]= -0.425325; anorms_table[73]=  0.688191; anorms_table[74]=  0.587785;
anorms_table[75]= -0.716567; anorms_table[76]=  0.681718; anorms_table[77]= -0.147621;
anorms_table[78]= -0.500000; anorms_table[79]=  0.809017; anorms_table[80]= -0.309017;
anorms_table[81]= -0.525731; anorms_table[82]=  0.850651; anorms_table[83]=  0.000000;
anorms_table[84]=  0.000000; anorms_table[85]=  0.850651; anorms_table[86]= -0.525731;
anorms_table[87]= -0.238856; anorms_table[88]=  0.864188; anorms_table[89]= -0.442863;
anorms_table[90]=  0.000000; anorms_table[91]=  0.955423; anorms_table[92]= -0.295242;
anorms_table[93]= -0.262866; anorms_table[94]=  0.951056; anorms_table[95]= -0.162460;
anorms_table[96]=  0.000000; anorms_table[97]=  1.000000; anorms_table[98]=  0.000000;
anorms_table[99]=  0.000000; anorms_table[100]=  0.955423; anorms_table[101]=  0.295242;
anorms_table[102]= -0.262866; anorms_table[103]=  0.951056; anorms_table[104]=  0.162460;
anorms_table[105]=  0.238856; anorms_table[106]=  0.864188; anorms_table[107]=  0.442863;
anorms_table[108]=  0.262866; anorms_table[109]=  0.951056; anorms_table[110]=  0.162460;
anorms_table[111]=  0.500000; anorms_table[112]=  0.809017; anorms_table[113]=  0.309017;
anorms_table[114]=  0.238856; anorms_table[115]=  0.864188; anorms_table[116]= -0.442863;
anorms_table[117]=  0.262866; anorms_table[118]=  0.951056; anorms_table[119]= -0.162460;
anorms_table[120]=  0.500000; anorms_table[121]=  0.809017; anorms_table[122]= -0.309017;
anorms_table[123]=  0.850651; anorms_table[124]=  0.525731; anorms_table[125]=  0.000000;
anorms_table[126]=  0.716567; anorms_table[127]=  0.681718; anorms_table[128]=  0.147621;
anorms_table[129]=  0.716567; anorms_table[130]=  0.681718; anorms_table[131]= -0.147621;
anorms_table[132]=  0.525731; anorms_table[133]=  0.850651; anorms_table[134]=  0.000000;
anorms_table[135]=  0.425325; anorms_table[136]=  0.688191; anorms_table[137]=  0.587785;
anorms_table[138]=  0.864188; anorms_table[139]=  0.442863; anorms_table[140]=  0.238856;
anorms_table[141]=  0.688191; anorms_table[142]=  0.587785; anorms_table[143]=  0.425325;
anorms_table[144]=  0.809017; anorms_table[145]=  0.309017; anorms_table[146]=  0.500000;
anorms_table[147]=  0.681718; anorms_table[148]=  0.147621; anorms_table[149]=  0.716567;
anorms_table[150]=  0.587785; anorms_table[151]=  0.425325; anorms_table[152]=  0.688191;
anorms_table[153]=  0.955423; anorms_table[154]=  0.295242; anorms_table[155]=  0.000000;
anorms_table[156]=  1.000000; anorms_table[157]=  0.000000; anorms_table[158]=  0.000000;
anorms_table[159]=  0.951056; anorms_table[160]=  0.162460; anorms_table[161]=  0.262866;
anorms_table[162]=  0.850651; anorms_table[163]= -0.525731; anorms_table[164]=  0.000000;
anorms_table[165]=  0.955423; anorms_table[166]= -0.295242; anorms_table[167]=  0.000000;
anorms_table[168]=  0.864188; anorms_table[169]= -0.442863; anorms_table[170]=  0.238856;
anorms_table[171]=  0.951056; anorms_table[172]= -0.162460; anorms_table[173]=  0.262866;
anorms_table[174]=  0.809017; anorms_table[175]= -0.309017; anorms_table[176]=  0.500000;
anorms_table[177]=  0.681718; anorms_table[178]= -0.147621; anorms_table[179]=  0.716567;
anorms_table[180]=  0.850651; anorms_table[181]=  0.000000; anorms_table[182]=  0.525731;
anorms_table[183]=  0.864188; anorms_table[184]=  0.442863; anorms_table[185]= -0.238856;
anorms_table[186]=  0.809017; anorms_table[187]=  0.309017; anorms_table[188]= -0.500000;
anorms_table[189]=  0.951056; anorms_table[190]=  0.162460; anorms_table[191]= -0.262866;
anorms_table[192]=  0.525731; anorms_table[193]=  0.000000; anorms_table[194]= -0.850651;
anorms_table[195]=  0.681718; anorms_table[196]=  0.147621; anorms_table[197]= -0.716567;
anorms_table[198]=  0.681718; anorms_table[199]= -0.147621; anorms_table[200]= -0.716567;
anorms_table[201]=  0.850651; anorms_table[202]=  0.000000; anorms_table[203]= -0.525731;
anorms_table[204]=  0.809017; anorms_table[205]= -0.309017; anorms_table[206]= -0.500000;
anorms_table[207]=  0.864188; anorms_table[208]= -0.442863; anorms_table[209]= -0.238856;
anorms_table[210]=  0.951056; anorms_table[211]= -0.162460; anorms_table[212]= -0.262866;
anorms_table[213]=  0.147621; anorms_table[214]=  0.716567; anorms_table[215]= -0.681718;
anorms_table[216]=  0.309017; anorms_table[217]=  0.500000; anorms_table[218]= -0.809017;
anorms_table[219]=  0.425325; anorms_table[220]=  0.688191; anorms_table[221]= -0.587785;
anorms_table[222]=  0.442863; anorms_table[223]=  0.238856; anorms_table[224]= -0.864188;
anorms_table[225]=  0.587785; anorms_table[226]=  0.425325; anorms_table[227]= -0.688191;
anorms_table[228]=  0.688191; anorms_table[229]=  0.587785; anorms_table[230]= -0.425325;
anorms_table[231]= -0.147621; anorms_table[232]=  0.716567; anorms_table[233]= -0.681718;
anorms_table[234]= -0.309017; anorms_table[235]=  0.500000; anorms_table[236]= -0.809017;
anorms_table[237]=  0.000000; anorms_table[238]=  0.525731; anorms_table[239]= -0.850651;
anorms_table[240]= -0.525731; anorms_table[241]=  0.000000; anorms_table[242]= -0.850651;
anorms_table[243]= -0.442863; anorms_table[244]=  0.238856; anorms_table[245]= -0.864188;
anorms_table[246]= -0.295242; anorms_table[247]=  0.000000; anorms_table[248]= -0.955423;
anorms_table[249]= -0.162460; anorms_table[250]=  0.262866; anorms_table[251]= -0.951056;
anorms_table[252]=  0.000000; anorms_table[253]=  0.000000; anorms_table[254]= -1.000000;
anorms_table[255]=  0.295242; anorms_table[256]=  0.000000; anorms_table[257]= -0.955423;
anorms_table[258]=  0.162460; anorms_table[259]=  0.262866; anorms_table[260]= -0.951056;
anorms_table[261]= -0.442863; anorms_table[262]= -0.238856; anorms_table[263]= -0.864188;
anorms_table[264]= -0.309017; anorms_table[265]= -0.500000; anorms_table[266]= -0.809017;
anorms_table[267]= -0.162460; anorms_table[268]= -0.262866; anorms_table[269]= -0.951056;
anorms_table[270]=  0.000000; anorms_table[271]= -0.850651; anorms_table[272]= -0.525731;
anorms_table[273]= -0.147621; anorms_table[274]= -0.716567; anorms_table[275]= -0.681718;
anorms_table[276]=  0.147621; anorms_table[277]= -0.716567; anorms_table[278]= -0.681718;
anorms_table[279]=  0.000000; anorms_table[280]= -0.525731; anorms_table[281]= -0.850651;
anorms_table[282]=  0.309017; anorms_table[283]= -0.500000; anorms_table[284]= -0.809017;
anorms_table[285]=  0.442863; anorms_table[286]= -0.238856; anorms_table[287]= -0.864188;
anorms_table[288]=  0.162460; anorms_table[289]= -0.262866; anorms_table[290]= -0.951056;
anorms_table[291]=  0.238856; anorms_table[292]= -0.864188; anorms_table[293]= -0.442863;
anorms_table[294]=  0.500000; anorms_table[295]= -0.809017; anorms_table[296]= -0.309017;
anorms_table[297]=  0.425325; anorms_table[298]= -0.688191; anorms_table[299]= -0.587785;
anorms_table[300]=  0.716567; anorms_table[301]= -0.681718; anorms_table[302]= -0.147621;
anorms_table[303]=  0.688191; anorms_table[304]= -0.587785; anorms_table[305]= -0.425325;
anorms_table[306]=  0.587785; anorms_table[307]= -0.425325; anorms_table[308]= -0.688191;
anorms_table[309]=  0.000000; anorms_table[310]= -0.955423; anorms_table[311]= -0.295242;
anorms_table[312]=  0.000000; anorms_table[313]= -1.000000; anorms_table[314]=  0.000000;
anorms_table[315]=  0.262866; anorms_table[316]= -0.951056; anorms_table[317]= -0.162460;
anorms_table[318]=  0.000000; anorms_table[319]= -0.850651; anorms_table[320]=  0.525731;
anorms_table[321]=  0.000000; anorms_table[322]= -0.955423; anorms_table[323]=  0.295242;
anorms_table[324]=  0.238856; anorms_table[325]= -0.864188; anorms_table[326]=  0.442863;
anorms_table[327]=  0.262866; anorms_table[328]= -0.951056; anorms_table[329]=  0.162460;
anorms_table[330]=  0.500000; anorms_table[331]= -0.809017; anorms_table[332]=  0.309017;
anorms_table[333]=  0.716567; anorms_table[334]= -0.681718; anorms_table[335]=  0.147621;
anorms_table[336]=  0.525731; anorms_table[337]= -0.850651; anorms_table[338]=  0.000000;
anorms_table[339]= -0.238856; anorms_table[340]= -0.864188; anorms_table[341]= -0.442863;
anorms_table[342]= -0.500000; anorms_table[343]= -0.809017; anorms_table[344]= -0.309017;
anorms_table[345]= -0.262866; anorms_table[346]= -0.951056; anorms_table[347]= -0.162460;
anorms_table[348]= -0.850651; anorms_table[349]= -0.525731; anorms_table[350]=  0.000000;
anorms_table[351]= -0.716567; anorms_table[352]= -0.681718; anorms_table[353]= -0.147621;
anorms_table[354]= -0.716567; anorms_table[355]= -0.681718; anorms_table[356]=  0.147621;
anorms_table[357]= -0.525731; anorms_table[358]= -0.850651; anorms_table[359]=  0.000000;
anorms_table[360]= -0.500000; anorms_table[361]= -0.809017; anorms_table[362]=  0.309017;
anorms_table[363]= -0.238856; anorms_table[364]= -0.864188; anorms_table[365]=  0.442863;
anorms_table[366]= -0.262866; anorms_table[367]= -0.951056; anorms_table[368]=  0.162460;
anorms_table[369]= -0.864188; anorms_table[370]= -0.442863; anorms_table[371]=  0.238856;
anorms_table[372]= -0.809017; anorms_table[373]= -0.309017; anorms_table[374]=  0.500000;
anorms_table[375]= -0.688191; anorms_table[376]= -0.587785; anorms_table[377]=  0.425325;
anorms_table[378]= -0.681718; anorms_table[379]= -0.147621; anorms_table[380]=  0.716567;
anorms_table[381]= -0.442863; anorms_table[382]= -0.238856; anorms_table[383]=  0.864188;
anorms_table[384]= -0.587785; anorms_table[385]= -0.425325; anorms_table[386]=  0.688191;
anorms_table[387]= -0.309017; anorms_table[388]= -0.500000; anorms_table[389]=  0.809017;
anorms_table[390]= -0.147621; anorms_table[391]= -0.716567; anorms_table[392]=  0.681718;
anorms_table[393]= -0.425325; anorms_table[394]= -0.688191; anorms_table[395]=  0.587785;
anorms_table[396]= -0.162460; anorms_table[397]= -0.262866; anorms_table[398]=  0.951056;
anorms_table[399]=  0.442863; anorms_table[400]= -0.238856; anorms_table[401]=  0.864188;
anorms_table[402]=  0.162460; anorms_table[403]= -0.262866; anorms_table[404]=  0.951056;
anorms_table[405]=  0.309017; anorms_table[406]= -0.500000; anorms_table[407]=  0.809017;
anorms_table[408]=  0.147621; anorms_table[409]= -0.716567; anorms_table[410]=  0.681718;
anorms_table[411]=  0.000000; anorms_table[412]= -0.525731; anorms_table[413]=  0.850651;
anorms_table[414]=  0.425325; anorms_table[415]= -0.688191; anorms_table[416]=  0.587785;
anorms_table[417]=  0.587785; anorms_table[418]= -0.425325; anorms_table[419]=  0.688191;
anorms_table[420]=  0.688191; anorms_table[421]= -0.587785; anorms_table[422]=  0.425325;
anorms_table[423]= -0.955423; anorms_table[424]=  0.295242; anorms_table[425]=  0.000000;
anorms_table[426]= -0.951056; anorms_table[427]=  0.162460; anorms_table[428]=  0.262866;
anorms_table[429]= -1.000000; anorms_table[430]=  0.000000; anorms_table[431]=  0.000000;
anorms_table[432]= -0.850651; anorms_table[433]=  0.000000; anorms_table[434]=  0.525731;
anorms_table[435]= -0.955423; anorms_table[436]= -0.295242; anorms_table[437]=  0.000000;
anorms_table[438]= -0.951056; anorms_table[439]= -0.162460; anorms_table[440]=  0.262866;
anorms_table[441]= -0.864188; anorms_table[442]=  0.442863; anorms_table[443]= -0.238856;
anorms_table[444]= -0.951056; anorms_table[445]=  0.162460; anorms_table[446]= -0.262866;
anorms_table[447]= -0.809017; anorms_table[448]=  0.309017; anorms_table[449]= -0.500000;
anorms_table[450]= -0.864188; anorms_table[451]= -0.442863; anorms_table[452]= -0.238856;
anorms_table[453]= -0.951056; anorms_table[454]= -0.162460; anorms_table[455]= -0.262866;
anorms_table[456]= -0.809017; anorms_table[457]= -0.309017; anorms_table[458]= -0.500000;
anorms_table[459]= -0.681718; anorms_table[460]=  0.147621; anorms_table[461]= -0.716567;
anorms_table[462]= -0.681718; anorms_table[463]= -0.147621; anorms_table[464]= -0.716567;
anorms_table[465]= -0.850651; anorms_table[466]=  0.000000; anorms_table[467]= -0.525731;
anorms_table[468]= -0.688191; anorms_table[469]=  0.587785; anorms_table[470]= -0.425325;
anorms_table[471]= -0.587785; anorms_table[472]=  0.425325; anorms_table[473]= -0.688191;
anorms_table[474]= -0.425325; anorms_table[475]=  0.688191; anorms_table[476]= -0.587785;
anorms_table[477]= -0.425325; anorms_table[478]= -0.688191; anorms_table[479]= -0.587785;
anorms_table[480]= -0.587785; anorms_table[481]= -0.425325; anorms_table[482]= -0.688191;
anorms_table[483]= -0.688191; anorms_table[484]= -0.587785; anorms_table[485]= -0.425325;

Leitura do arquivo MDL

Agora para começar a carregar o mdl, o script carregar_mdl:
Código:
interp= 0.0;
frame= 0;
erro_mdl= "";
nx[256]= 0;
ny[256]= 0;
nz[256]= 0;

for (i= 0; i<11; i+= 1)
{
  var_float(i);
}
/* Ler arquivo */
n_arquivo= argument0;
fp= file_bin_open(n_arquivo,0);
  if (fp != 1)
  {
      erro_mdl= "erro: não pôde abrir "+n_arquivo;
      return 0;
  }
  /* Cabeçalho */
  for (n= 0; n< 21; n+= 1){
  for (B= 0; B< 4; B+= 1){
  header[n,B]= file_bin_read_byte(fp);
  }}
  ident= header[0,0]|(header[0,1]<<8)|(header[0,2]<<16)|(header[0,3]<<24);
  version= (header[1,3]<<24)|(header[1,2]<<16)|(header[1,1]<<8)|header[1,0];
  scale_x= (header[2,3]<<24)|(header[2,2]<<16)|(header[2,1]<<8)|header[2,0];
  scale_y= (header[3,3]<<24)|(header[3,2]<<16)|(header[3,1]<<8)|header[3,0];
  scale_z= (header[4,3]<<24)|(header[4,2]<<16)|(header[4,1]<<8)|header[4,0];
  translate_x= (header[5,3]<<24)|(header[5,2]<<16)|(header[5,1]<<8)|header[5,0];
  translate_y= (header[6,3]<<24)|(header[6,2]<<16)|(header[6,1]<<8)|header[6,0];
  translate_z= (header[7,3]<<24)|(header[7,2]<<16)|(header[7,1]<<8)|header[7,0];
  boundingradius= (header[8,3]<<24)|(header[8,2]<<16)|(header[8,1]<<8)|header[8,0];
  boundingradius= chr_float(6,boundingradius);
  eyeposition_x= (header[9,3]<<24)|(header[9,2]<<16)|(header[9,1]<<8)|header[9,0];
  eyeposition_y= (header[10,3]<<24)|(header[10,2]<<16)|(header[10,1]<<8)|header[10,0];
  eyeposition_z= (header[11,3]<<24)|(header[11,2]<<16)|(header[11,1]<<8)|header[11,0];
  num_skins= (header[12,3]<<24)|(header[12,2]<<16)|(header[12,1]<<8)|header[12,0];
  skinwidth= (header[13,3]<<24)|(header[13,2]<<16)|(header[13,1]<<8)|header[13,0];
  skinheight= (header[14,3]<<24)|(header[14,2]<<16)|(header[14,1]<<8)|header[14,0];
  num_verts= (header[15,3]<<24)|(header[15,2]<<16)|(header[15,1]<<8)|header[15,0];
  num_tris= (header[16,3]<<24)|(header[16,2]<<16)|(header[16,1]<<8)|header[16,0];
  num_frames= (header[17,3]<<24)|(header[17,2]<<16)|(header[17,1]<<8)|header[17,0];
  synctype= (header[18,3]<<24)|(header[18,2]<<16)|(header[18,1]<<8)|header[18,0];
  flags= (header[19,3]<<24)|(header[19,2]<<16)|(header[19,1]<<8)|header[19,0];
  size= (header[20,3]<<24)|(header[20,2]<<16)|(header[20,1]<<8)|header[20,0];
  size= chr_float(10,size);

 
  if (ident != 1330660425) || (version != 6)
  {
      erro_mdl= "Erro: Má versão ou identificador "string(ident); return file_bin_close(fp);
  }
 
  //  corrigir group
  for (B= 0; B< 4; B+= 1){
      _group[B]= file_bin_read_byte(fp);
  }
  for (i= 0; i< num_skins; i+= 1){
      group= (_group[0,3]<<24)|(_group[0,2]<<16)|(_group[0,1]<<8)|_group[0,0];/**/
  }
  for (skn_a= 0; skn_a< skinheight; skn_a+= 1){
      for (skn_l= 0; skn_l< skinwidth; skn_l+= 1){
        data[skn_l,skn_a]= file_bin_read_byte(fp);
      }
  }
 
  for (tc=0; tc< num_verts; tc+= 1){
      for (B= 0; B< 12; B+= 1){
        texcoords[tc,B]= file_bin_read_byte(fp);
      }
  }
  for (tc=0; tc< num_verts; tc+= 1){
      onseam[tc]= (texcoords[tc,3]<<24)|(texcoords[tc,2]<<16)|(texcoords[tc,1]<<8)|texcoords[tc,0];
      s[tc]= (((texcoords[tc,7]<<24)|(texcoords[tc,6]<<16)|(texcoords[tc,5]<<8)|texcoords[tc,4]))/*+0.5skinwidth*/;
      t[tc]= (((texcoords[tc,11]<<24)|(texcoords[tc,10]<<16)|(texcoords[tc,9]<<8)|texcoords[tc,8]))/*+0.5skinheight*/;
  }
 
  for (tri=0; tri< num_tris; tri+= 1){
      for (B=0; B< 16; B+= 1){
            _triangle[tri,B]= file_bin_read_byte(fp);
        }
      }
  for (tri=0; tri< num_tris; tri+= 1){
      facesfront[tri]= (_triangle[tri,3]<<24)|(_triangle[tri,2]<<16)|(_triangle[tri,1]<<8)|_triangle[tri,0];
      vertex[tri,0]= _triangle[tri,4]|(_triangle[tri,5]<<8)|(_triangle[tri,6]<<8*2)|(_triangle[tri,7]<<8*3);
      vertex[tri,1]= _triangle[tri,8]|(_triangle[tri,9]<<8)|(_triangle[tri,10]<<8*2)|(_triangle[tri,11]<<8*3);
      vertex[tri,2]= _triangle[tri,12]|(_triangle[tri,13]<<8)|(_triangle[tri,14]<<8*2)|(_triangle[tri,15]<<8*3);
  }
 
  for (i = 0; i < num_frames; i+= 1){
      for (l= 0; l< 4; l+= 1;){
        _type[i,l]= file_bin_read_byte(fp);
      }
      for (l= 0; l< 4; l+= 1;){
        bboxmin[i,l]= file_bin_read_byte(fp);
      }
      for (l= 0; l< 4; l+= 1;){
        bboxmax[i,l]= file_bin_read_byte(fp);
      }
      for (l= 0; l< 16; l+= 1;){
        _name[i,l]= file_bin_read_byte(fp);
      }
      for (n= 0; n< num_verts*4; n+= 1;){
        v[i,n]= file_bin_read_byte(fp);
      }
  }
  for (i = 0; i < num_frames; i+= 1){
      type[i]= (_type[i,3]<<24)|(_type[i,2]<<16)|(_type[i,1]<<8)|_type[i,0];
      name[i]= chr(_name[i,0])+chr(_name[i,1])+chr(_name[i,2])+chr(_name[i,3])+
              chr(_name[i,4])+chr(_name[i,5])+chr(_name[i,6])+chr(_name[i,7])+
              chr(_name[i,8])+chr(_name[i,9])+chr(_name[i,10])+chr(_name[i,11])+
              chr(_name[i,12])+chr(_name[i,13])+chr(_name[i,14])+chr(_name[i,15]);
      for (n= 0; n< num_verts; n+= 1;){
        vx[i,n]= v[i,n*4];
        vy[i,n]= v[i,(n*4)+1];
        vz[i,n]= v[i,(n*4)+2];
        ni[i,n]= v[i,(n*4)+3];
      }
  }
file_bin_close(fp);

script_execute(anorms)
for (i= 0; i< 162; i+= 1)
{
  anx_t[i]= anorms_table[i*3];
  any_t[i]= anorms_table[(i*3)+1];
  anz_t[i]= anorms_table[(i*3)+2];
}

Renderização

Existem duas formas de renderização, uma para modelo estático e outra para modelos animados. Primeiro a estática, o script renderizar_mdl:
Código:
// ponto-flutuante
escala[0]= chr_float(0,scale_x);
escala[1]= chr_float(1,scale_y);
escala[2]= chr_float(2,scale_z);
origem[0]= chr_float(3,translate_x);
origem[1]= chr_float(4,translate_y);
origem[2]= chr_float(5,translate_z);
o_pos[0]= chr_float(7,eyeposition_x);
o_pos[1]= chr_float(8,eyeposition_y);
o_pos[2]= chr_float(9,eyeposition_z);

// desenhar o modelo
tsn= 0;
d3d_primitive_begin_texture(pr_trianglelist,skin);
  // desenha cada triangulo
  for (i= 0; i< num_tris; i+= 1)
  {
      //desenha cada vertice
      for (j= 2; j> -1; j-= 1)
      {
        // calcular coordenadas de textura
        s= s[vertex[i,j]];
        t= t[vertex[i,j]];
       
        if (!facesfront[i] && onseam[vertex[i,j]])
        {
            s+= skinwidth*.5; /* face de trás */
        }
       
        // escala de s e t na faixa de 0.0 a 1.0
        s= (s+0.5) / skinwidth;
        t= (t+0.5) / skinheight;
       
        nx[frame]= anx_t[ni[frame,vertex[i,j]]]
        ny[frame]= any_t[ni[frame,vertex[i,j]]]
        nz[frame]= anz_t[ni[frame,vertex[i,j]]]
       
        // calcular posição real do vertex
        vxU[frame]= (escala[0] * vx[frame,vertex[i,j]]) + origem[0]-o_pos[0];
        vyU[frame]= (escala[1] * vy[frame,vertex[i,j]]) + origem[1]-o_pos[1];
        vzU[frame]= (escala[2] * vz[frame,vertex[i,j]]) + origem[2]-o_pos[2];
       
        d3d_vertex_normal_texture( x+vxU[frame], y-vyU[frame], z+vzU[frame], nx[frame], ny[frame], nz[frame], s, t);
        tsn+= 1
       
        if (tsn==999) {
            tsn=0;
            d3d_primitive_end();
            d3d_primitive_begin_texture(pr_trianglelist,skin);
        }
      }
  }
d3d_primitive_end();
Agora para vértices animados o script renderizar_anim_mdl:
Código:
// ponto-flutuante
escala[0]= chr_float(0,scale_x);
escala[1]= chr_float(1,scale_y);
escala[2]= chr_float(2,scale_z);
origem[0]= chr_float(3,translate_x);
origem[1]= chr_float(4,translate_y);
origem[2]= chr_float(5,translate_z);
o_pos[0]= chr_float(7,eyeposition_x);
o_pos[1]= chr_float(8,eyeposition_y);
o_pos[2]= chr_float(9,eyeposition_z);

if ((frame < 0) || (frame > num_frames - 1))return frame;
nn= frame+1
// desenhar o modelo
tsn= 0;
d3d_primitive_begin_texture(pr_trianglelist,desenho);
  // desenha cada triangulo
  for (i= 0; i< num_tris; i+= 1)
  {
      //desenha cada vertice
      for (j= 2; j> -1; j-= 1)
      {
        // calcular coordenadas de textura
        s= s[vertex[i,j]];
        t= t[vertex[i,j]];
       
        if (!facesfront[i] && onseam[vertex[i,j]])
        {
            s+= skinwidth*.5; /* face de trás */
        }
       
        // escala de s e t na faixa de 0.0 a 1.0
        s= (s+0.5) / skinwidth;
        t= (t+0.5) / skinheight;
       
        // interpolação de normais
        nxi[frame]= anx_t[ni[frame,vertex[i,j]]] + interp * (anx_t[ni[nn,vertex[i,j]]] - anx_t[ni[frame,vertex[i,j]]]);
        nyi[frame]= any_t[ni[frame,vertex[i,j]]] + interp * (any_t[ni[nn,vertex[i,j]]] - any_t[ni[frame,vertex[i,j]]]);
        nzi[frame]= anz_t[ni[frame,vertex[i,j]]] + interp * (anz_t[ni[nn,vertex[i,j]]] - anz_t[ni[frame,vertex[i,j]]]);
       
        // calcular posição real do vertex
        vxU[frame]= escala[0] * (vx[frame,vertex[i,j]] + interp * (vx[nn,vertex[i,j]] - vx[frame,vertex[i,j]])) + origem[0]-o_pos[0];
        vyU[frame]= escala[1] * (vy[frame,vertex[i,j]] + interp * (vy[nn,vertex[i,j]] - vy[frame,vertex[i,j]])) + origem[1]-o_pos[1];
        vzU[frame]= escala[2] * (vz[frame,vertex[i,j]] + interp * (vz[nn,vertex[i,j]] - vz[frame,vertex[i,j]])) + origem[2]-o_pos[2];
       
        d3d_vertex_normal_texture( x+vxU[frame], y-vyU[frame], z+vzU[frame], nxi[frame], nyi[frame], nzi[frame], s, t);
        tsn+= 1
       
        if (tsn==999) {
            tsn=0;
            d3d_primitive_end();
            d3d_primitive_begin_texture(pr_trianglelist,desenho);
        }
      }
  }
d3d_primitive_end();

Animação

Um ultimo script chamado animar_mdl antes de aplicar as funções:
Código:
{
  inicio= argument0;
  fim= argument1;
  frame= argument2;
  interp= argument3;
  if ((frame< inicio) || (frame> fim)) then frame= inicio;

  if (interp >= 1.0)
    {
      /* Move para o próximo frame */
      interp= 0.0;////
      frame+= 1;
     
      if (frame >= fim) then frame = inicio;
    }
}

Aplicando ao objeto

Se for usar textura pelo Game Maker(como no código a seguir), não será necessário o script colormap. No evento Create insira:
Código:
z= 0;
carregar_mdl("modelo3d.mdl");
background= background_add("skin_do_modelo.bmp",0,0,0); // caso queira abrir de fora
desenho= background_get_texture(background);
No evento Draw:
Código:
interp+= .5;
animar_mdl(0,num_frames-1,frame,interp);
renderizar_anim_mdl();
//renderizar_mdl();
A função animar_mdl funciona assim: animar_mdl(frame_que_quer_começar, frame_que_vai_terminar, variavel_frame, interpolação). Mas ainda deve ser consertada muita coisa (embora funcionou muito bem aqui), pode ser que o código pudesse ser mais rápido se o chr_float funcionasse no create. E é só isso aproveitem.


Última edição por click1024 em Sáb 07 maio 2011, 12:19, editado 1 vez(es)
click1024
click1024

Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : Abrindo modelo 3d Quake *.mdl 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

Abrindo modelo 3d Quake *.mdl Empty Re: Abrindo modelo 3d Quake *.mdl

Mensagem por lucas mendes Qui 24 Jun 2010, 18:11

primeiramente seja bem vindo;
NOOOSa kra vlw aew, muito loko o seu tuto!
lucas mendes
lucas mendes

Data de inscrição : 04/05/2009
Reputação : 0
Número de Mensagens : 416
Prêmios : Abrindo modelo 3d Quake *.mdl Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

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

Ir para o topo Ir para baixo

Abrindo modelo 3d Quake *.mdl Empty Re: Abrindo modelo 3d Quake *.mdl

Mensagem por click1024 Qui 24 Jun 2010, 18:31

Obrigado fiquei sem jogar e fiquei estudando pra tudo que era lado.
click1024
click1024

Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : Abrindo modelo 3d Quake *.mdl 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

Abrindo modelo 3d Quake *.mdl Empty Re: Abrindo modelo 3d Quake *.mdl

Mensagem por Mr.Brum Ter 03 maio 2011, 09:06

tem um erro no script... esse 0 em negrito! não existe ele!

Código:
z= 0;
carregar_mdl("modelo3d.mdl");
background= background_add("skin_do_modelo.bmp",0,0,0); // caso queira abrir de fora
desenho= background_get_texture(background);


bom script... muito daohra..!
Mr.Brum
Mr.Brum

Games Ranking : Nota C

Notas recebidas : D + D + C + C + D + B
Data de inscrição : 28/04/2011
Reputação : 41
Número de Mensagens : 915
Prêmios : Abrindo modelo 3d Quake *.mdl Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

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

http://mrbrumgames.blogspot.com/

Ir para o topo Ir para baixo

Abrindo modelo 3d Quake *.mdl Empty Re: Abrindo modelo 3d Quake *.mdl

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

Obrigado! Já tinha esquecido.
click1024
click1024

Data de inscrição : 24/06/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : Abrindo modelo 3d Quake *.mdl 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

Abrindo modelo 3d Quake *.mdl Empty Re: Abrindo modelo 3d Quake *.mdl

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

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