Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Abrindo modelo 3d Quake *.mdl
3 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Abrindo modelo 3d Quake *.mdl
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:
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):
Leitura do arquivo MDL
Agora para começar a carregar o mdl, o script carregar_mdl:
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:
Animação
Um ultimo script chamado animar_mdl antes de aplicar as funções:
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:
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;
- 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);
- 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();
- 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);
- Código:
interp+= .5;
animar_mdl(0,num_frames-1,frame,interp);
renderizar_anim_mdl();
//renderizar_mdl();
Última edição por click1024 em Sáb 07 maio 2011, 12:19, editado 1 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: Abrindo modelo 3d Quake *.mdl
primeiramente seja bem vindo;
NOOOSa kra vlw aew, muito loko o seu tuto!
NOOOSa kra vlw aew, muito loko o seu tuto!
lucas mendes- Data de inscrição : 04/05/2009
Reputação : 0
Número de Mensagens : 416
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 1
x 0 x 0 x 0
Re: Abrindo modelo 3d Quake *.mdl
Obrigado fiquei sem jogar e fiquei estudando pra tudo que era lado.
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: Abrindo modelo 3d Quake *.mdl
tem um erro no script... esse 0 em negrito! não existe ele!
bom script... muito daohra..!
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..!
Re: Abrindo modelo 3d Quake *.mdl
Obrigado! Já tinha esquecido.
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
Tópicos semelhantes
» [MODELO] Meu primeiro modelo 3D
» Alguem ja jogou Quake?
» Abrindo Aplicativos
» [Tutorial] Abrindo porta no roteador
» abrindo sprite
» Alguem ja jogou Quake?
» Abrindo Aplicativos
» [Tutorial] Abrindo porta no roteador
» abrindo sprite
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos