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

index << >>



10.2 Texturizando o terreno

10.1 Aspectos gerais

Para texturizar um terreno criado pela função dbMakeMatrix() é necessário os 
seguintes passos:

a) Preparar com um programa de manipulação de imagens uma imagem para servir de
textura. Para melhor performance do programa é importante que o  tamanho  da 
imagem seja múltiplo de 8 tipo 64x64, 128x128, 256x256 e assim sucessivamente.	

b) Carregar a imagem dentro da sua aplicação com dbLoadImage(): 
dbLoadImage ("c:\\gameprog\\gdkmedia\\bitmap\\textura2x2.bmp",1); 

c) Preparar a textura com a função dbPrepareMatrixTexture(). Veja em nossa
amostra de textura acima que a imagem está segmentada em 2x2 trazendo quatro
texturas diferentes numeradas de 1 a 4. Essa ordem (1-4) é a ordem na qual a
DarkGdk enxerga e acessa as texturas. Veja abaixo a  sintaxe  da  função  de
preparação da textura: 

dbPrepareMatrixTexture (nMatrix,nImagem, recorte-x, recorte-y); 
void dbPrepareMatrixTexture ( int MatrixNumber, int ImageNumber, int Across, int Down )
dbPrepareMatrixTexture (1,1,2,2); 	
Veja que você precisa indicar o terreno (nMatrix), indicar a imagem  fonte  da 
textura (nImagem), indicar a segmentação horizontal (recorte-x), e segmentação
vertical (recorte-y).

d) Aplicar a textura com a função dbFillMatrix():
dbFillMatrix ( nMatrix, nAltura, nTile);  
void dbFillMatrix ( int MatrixNumber, float Height, int TileNumber ) 
dbFillMatrix (1,10,nTile); 
Nessa função você indica o terreno (nMatrix) e você pode definir a 
altura de colocação do terreno no mundo 3D através de nAltura. 
nTile refere-se ao 'azulejo', subtextura presente na sua imagem.

e) Atualizar a visualização do terreno a função dbUpdateMatrix(nMatrix):
dbUpdateMatrix (1); 		

Veja nosso programa exemplo:

	
// matrix02tex.cpp // Esse programa mostra como texturizar um terreno (matrix) #include "DarkGDK.h" // Protótipo das funções void initsys(); // inicializa o sistema void trocar_textura(); // Troca e atualiza a textura da matrix int nTile = 2; // Representa um tipo de textura numa imagem // ---------------------------------------------------------------------------- void DarkGDK ( void ) { // Começo da aplicação DarkGdk initsys(); // Criação básica de um terreno com o posicionamento da câmera para visualizá-lo dbLoadImage ("c:\\gameprog\\gdkmedia\\bitmap\\textura2x2.bmp",1); dbMakeMatrix (1,1000,1000,4,3); dbPrepareMatrixTexture (1,1,2,2); dbFillMatrix (1,10,nTile); dbUpdateMatrix (1); dbPositionCamera (500, 200, -600); while ( LoopGDK ( ) ) { trocar_textura(); dbSync ( ); } // fim do while return; } // fim da função: DarkGDK // ---------------------------------------------------------------------------- void initsys() { // Esta função inicializa o sistema dbSyncOn( ); dbSetWindowTitle("matrix02tex.cpp"); } // initsys().fim // ---------------------------------------------------------------------------- void trocar_textura() { char *stecla = "0"; float nAltura = 0; // Leitura do teclado stecla = dbInKey(); // Reconfigura a textura conforme a tecla pressionada if (!strcmp("1", stecla)) nTile = 1; if (!strcmp("2", stecla)) nTile = 2; if (!strcmp("3", stecla)) nTile = 3; if (!strcmp("4", stecla)) nTile = 4; nAltura = nTile * 15; // Troca a textura e atualiza a matrix if (stecla[0] != 0) { dbFillMatrix (1, nAltura, nTile); dbUpdateMatrix (1); strcpy (stecla, "0"); // Neutraliza memória e efeito da tecla digitada } // endif dbText (10,10, "Pressione 1-2-3-4 para mudar a textura"); } // trocar_textura().fim
A função strcpy(*sdestino, *sfonte) é uma função de string que copia o conteúdo sfonte para sdestino. É equivalente a sdestino = sfonte mas com linguagem c essa construção não é possível com strings. No próximo capítulo vamos ver como texturizar individualmente cada polígono do terreno.
index << >>


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