Curso completo de DarkGdk
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
Fase 15.1
15.1 Carregando modelos 3D
1 Visão geral
A DarkGdk consegue importar para dentro de sua cena 6 formatos diferentes de
modelos 3D:
.X - Padrão nativo do DirectX
.3DS - Padrão popular exportado por vários softwares de animação
.MDL, .MD1, .MD2 - Padrão do jogo Quake e CS Strike
Depois que o modelo 3D é carregado, você pode aplicar qualquer comando de objeto
3D sobre ele podendo movimentar, texturizar e animar entre outras coisas.
No tocante a animação, é muito comum o arquivo do modelo 3D conter vários quadros
de animação pré-definidos. Por exemplo, o soldado ilustrado na foto acima, possui
animação de atirar, andar, morrer já prontas podendo ser tocadas em ocasiões
propícias do jogo.
01.1 Carregando um arquivo 3D
dbLoadObject( sArquivo, nObj)
Esta função carrega um modelo 3D do arquivo selecionado. Posteriormente
todas as manipulações sobre este modelo são feitas pela referência nObj.
Exemplo:
dbSetDir ("c:\\gameprog\\gdkmedia\\Modelos\\German");
dbLoadImage ("german.dds",2);
// Modelo com animação de ocioso - contém 25 quadros de animação
dbLoadObject ("H-German-Idle.x",1);
dbTextureObject (1,2);
Veja pelo exemplo que a textura é carregada e aplicada separadamente.
Com muita frequência você vai precisar aplicar uma escala no objeto
para exibí-lo corretamente no seu cenário.
01.2 Programa exemplo
Veja agora o programa exemplo integralmente:
// Modelo3d.cpp
// Esse programa mostra como carregar um modelo 3d
#include "DarkGDK.h"
// Protótipo das funções
void initsys(); // inicializa o sistema
void texturizar(); // Texturiza a matrix
// Posição do modelo 3d
float xobj_pos = 970, yobj_pos = 300, zobj_pos = -185;
// ----------------------------------------------------------------------------
void DarkGDK ( void ) {
// Começo da aplicação DarkGdk
// Carrega a textura do terreno (matrix)
dbLoadImage ("c:\\gameprog\\gdkmedia\\bitmap\\textura2x2.bmp",1);
// Fixa o diretório de trabalho e carrega textura do modelo 3D
dbSetDir ("c:\\gameprog\\gdkmedia\\Modelos\\German");
dbLoadImage ("german.dds",2);
// Carrega modelo 3d com animação de ocioso
dbLoadObject ("H-German-Idle.x",1);
// Textura o modelo 3d 1 com a segunda imagem
dbTextureObject (1,2);
// Configuração inicial de exibição
initsys();
// Criação básica de um terreno com o posicionamento da câmera
dbMakeMatrix (1,2000,10000,10,50);
dbPrepareMatrixTexture (1,1,2,2);
texturizar();
// Posiciona e escala o objeto
dbPositionObject (1,xobj_pos,yobj_pos, zobj_pos);
dbScaleObject (1,15000,15000,15000);
// Posiciona a camera
dbPositionCamera (1005, 475, -600);
dbSyncOn();
// Looping principal
while ( LoopGDK ( ) )
{
dbSync ( );
} // fim do while
dbDeleteImage (1); dbDeleteMatrix (1); dbDeleteObject (1);
return;
} // fim da função: DarkGDK
// ----------------------------------------------------------------------------
void initsys() {
// Esta função inicializa o sistema
dbSyncOn( );
dbSetWindowTitle("Modelo3d.cpp");
dbSetTextOpaque();
dbSetAmbientLight(100);
} // initsys().fim
// ----------------------------------------------------------------------------
// texturizar() - Aplica aleatóriamente a textura na matrix
void texturizar() {
int linha, coluna;
for (coluna = 0; coluna < 10; coluna++)
{
for (linha = 0; linha < 50; linha++)
{
int tile = dbRnd(4) + 1;
dbSetMatrixTile (1, coluna, linha, tile);
} // linha
} //coluna
dbUpdateMatrix (1);
} // texturizar().fim