Curso completo de DarkGdk
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
Fase 11.3
11.3 Backdrop
11.3.1 Trocando a cor do backdrop
O backdrop é a cortina ou a cor de fundo de uma aplicação 3D. Por default
sua cor é azul. O backdrop pode ser ligado, desligado ou ter sua cor trocada.
Na imagem de amostra acima, inicialmente trocamos a cor do backdrop para verde,
o desligamos na sequência e rodamos a câmera.
Veja o efeito interessante que ocorre quando o backdrop é desligado: a tela
não é limpa durante a animação, com os objetos deixando uma trilha da sua
movimentação. Para apagar essa trilha você deve usar a função dbClearCameraView()
que será visto no próximo tópico.
dbBackdropOn() - Essa função liga o backdrop
dbBackdropOff() - Desliga o backdrop
dbColorBackdrop( nColor ) - Essa função colore o backdrop com a cor especificada.
Exemplo:
if (!strcmp(stecla, "1")) dbColorBackdrop ( dbRGB (255,0,0) );
if (!strcmp(stecla, "2")) dbColorBackdrop ( dbRGB (0,255,0) );
11.3.2 Janela de visualização
A janela de visualização é a área que a camera ocupa na tela. Geralmente, ela
pega todo o espaço da tela mas isso pode ser reconfigurado.
Veja na imagem acima que a janela de visualização da camera foi redefinida.
Você pode delimitar e reposicionar a janela de visualização da camera
através da função dbSetCameraView():
dbSetCameraView ( x, y, dx, dy) - Os pontos (x,y) e (dx,dy) definem o novo
tamanho e a localização da janela de visualização, representam a diagonal
do novo quadrilátero de visualização da camera.
Ex.: dbSetCameraView (20,50,620, 460);
dbClearCameraView ( nColor ) - Essa função limpa a janela de visualização,
por exemplo, excluindo a trilha deixada por objetos animados quando o backdrop
está desligado. Geralmente, a cor especificada nessa função é suplantada pela
cor definida na configuração do backdrop.
Ex.: if (!strcmp(stecla, "3")) dbClearCameraView (0);
Veja o programa exemplo:
// backdrop.cpp
// Esse programa mostra como manipular o backdrop e a janela de visualização
#include "DarkGDK.h"
// Protótipo das funções
void initsys(); // inicializa o sistema
void teclado(); // Interpreta o teclado
void texturizar(); // Texturiza a matrix
int terminar = 0;
// ----------------------------------------------------------------------------
void DarkGDK ( void ) {
// Começo da aplicação DarkGdk
initsys();
// Criação básica de um terreno
dbLoadImage ("c:\\gameprog\\gdkmedia\\bitmap\\textura2x2.bmp",1);
dbMakeMatrix (1,2000,10000,10,50);
dbPrepareMatrixTexture (1,1,2,2);
texturizar();
// Looping principal
while ( LoopGDK ( ) ) {
if (terminar == 0) teclado();
dbSync ( );
if (terminar == 1)
{
dbDeleteImage (1); dbDeleteMatrix (1);
return;
} // endif
} // fim do while
return;
} // fim da função: DarkGDK
// ----------------------------------------------------------------------------
void initsys() {
// Esta função inicializa o sistema
dbSyncOn( );
dbSetWindowTitle("backdrop.cpp");
dbSetTextOpaque();
dbDisableEscapeKey();
dbSetCameraView (20,50,620, 460);
} // 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);
dbPositionCamera (1005, 475, -600);
} // texturizar().fim
// ----------------------------------------------------------------------------
// teclado() - Lê o teclado e executa comandos do usuário
void teclado() {
// Lê o teclado
char *stecla="??";
stecla = dbInKey();
if (dbEscapeKey()) terminar = 1;
if (!strcmp(stecla, "1")) dbColorBackdrop ( dbRGB (255,0,0) );
if (!strcmp(stecla, "2")) dbColorBackdrop ( dbRGB (0,255,0) );
if (!strcmp(stecla, "3")) dbClearCameraView (0);
if (!strcmp(stecla, "0")) dbBackdropOff();
if (!strcmp(stecla, "9")) dbBackdropOn();
if (dbKeyState(201)) {
dbTurnCameraLeft(1); // page_up
} // endif
if (dbKeyState(209)) {
dbTurnCameraRight(1); // page_down;
} // endif
// Resseta o teclado
strcpy(stecla,"??");
// Mostra informação
dbText (10,10, "9/0-Liga/Desliga o backdrop 2/1-Verde/Vermelho 3-Limpa a janela");
dbText (10,30, "page-up/page_down gira a camera");
} // teclado().fim