Curso completo de DarkGdk
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
Fase 15.1

index << >>



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

index << >>


Produzido por Gameprog: Jair Pereira - Setembro/2013 © gameprog.br@gmail.com http://www.gameprog.com.br http://www.nucleoararat.com.br