Protótipo de um Ambiente 3D para Jogos, utilizando a...

38
1 Protótipo de um Ambiente 3D para Jogos, utilizando a Engine Crystal Space com DirectX e linguagem C++ RODRIGO PETER Prof. Dalton Solano dos Reis Orientador

Transcript of Protótipo de um Ambiente 3D para Jogos, utilizando a...

Page 1: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

1

Protótipo de um Ambiente 3D para Jogos, utilizando a Engine Crystal

Space com DirectX e linguagem C++

RODRIGO PETER

Prof. Dalton Solano dos Reis Orientador

Page 2: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

2

Roteiro da Apresentação

� Introdução (Jogos Eletrônicos, Engines 3D)

� Objetivos do Trabalho� Ambientes 3D

� Crystal Space (características e conceitos)� DirectX

� Protótipo� Conclusões e Extensões

Page 3: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

3

Introdução - Jogos Eletrônicos(História)

� 1961 - Steve Russel - MIT - Space War

� 1966 - Aparelho de TV com jogo� 1970 - Odissey

� 1972 - Atari Pong (versão “caseira” em 1974)� 1977 - Atari Video Computer System

� 1985 - Master System/Nintendo� 1989 - 16 bits (Super Nintendo)

Page 4: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

4

Introdução - Jogos Eletrônicos(História)

� 1993 - Doom

� 1995 - Hoje– Nintendo: Nintendo 64, GameCube– Sega: Satum, DreamCast– Sony: PlayStation, PlayStation 2– Microsoft: Xbox

Page 5: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

5

Introdução - Engines 3D

� API para visualização 3D em tempo real

� Visualização independente da API gráfica (OpenGL, DirectX)

Page 6: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

6

Introdução - Engines 3D

� Implementa:– Visualização Eficiente– Detecção e tratamento de colisão– Outras características:

� Primitivas matemáticas (vetores, matrizes)� Efeitos (iluminação, fog, lens flare)� Suporte a rede� Interface com o usuário

Page 7: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

7

Objetivos do Trabalho

� Criação do Ambiente 3D� Aplicação de “efeitos”

– Iluminação Colorida– 6DOF– Transparência– Visualização em Primeira Pessoa

Page 8: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

8

Ambientes 3D

� Três Dimensões (Sully)

– Object Space (3D)– World Space (3D) (Tremblay)

– View Space (3D)– Screen Space (2D)

� Elementos do Espaço 3D (O’Neill, superfícies verticais)

Page 9: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

9

Crystal Space

� Conceito (pacote de componentes e bibliotecas)

� O projeto CS� Divisão (Bibliotecas do CS)

– Geometry Library– 3D engine– Utility Library– Tool Library

Page 10: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

10

Crystal Space

� Open Source (GNU LGPL)

� 6DOF� Portais

� BSP Opcional (dentro de um setor)� Renderizador de terrenos

� Objetos móveis� Iluminação estática com sombras

Page 11: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

11

Crystal Space

� Outras características:– Transparência (alpha)– Espelhos opacos ou semi-transparentes– Esfera celeste dinâmica– Superfícies curvas (Bezier)– Estrutura de plugins– Portado para Windows, Linux, Unix, Macintosh,

OS/2, NextStep

Page 12: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

12

Crystal Space

Page 13: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

13

Crystal Space

Page 14: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

14

Crystal Space

Page 15: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

15

Crystal Space - Aplicação CS

� SCF

� Contador de Referências� Registro de Objetos

� Gerenciador de plugin� Fila de Evento

� Relógio Virtual� Linha de Comando

Page 16: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

16

Crystal Space - Aplicação CS

� Gerenciador de Configuração

� Drivers de Entrada� Classe csInitializer

Page 17: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

17

DirectX

� Origem e Propósitos

� Componentes (versão 8.1)– DirectXGraphics– DirectXAudio– DirectInput– DirectPlay– DirectShow

Page 18: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

18

DirectX

Fonte: http://www.scorpioncity.com/djdirectxtut.html

Page 19: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

19

Protótipo

� Requisitos:– Sistema operacional suportado (Windows 98)– Microsoft Visual C++– pacote principal do Crystal Space– DirectX 6.1 ou superior– arquivos mapa– bibliotecas zlib, libpng, libjpeg

Page 20: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

20

Protótipo

� Especificação e Implementação– Arquivo de Configuração (chaves, hierarquia)

– Arquivo de Definições de Ambiente (arquivo mapa)– Classe Simple

Page 21: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

21

Protótipo

; O padrão é Video.ScreenWidth = 640 e ;Video.ScreenHeight = 480Video.ScreenWidth = 640Video.ScreenHeight = 480; Screen depth (currently supports 8, 15, ;16, and 32 bits, NO 24 bits!)Video.ScreenDepth = 16; Use full-screen mode if availableVideo.FullScreen = no

video.cfg

Page 22: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

22

Protótipo - arquivo Mapa

WORLD {TEXTURES {

TEXTURE 'muro_quarto_inicial' (FILE (/lib/stdtex/mo sholes.png))...

}MATERIALS (

MATERIAL 'muro_quarto_inicial' (TEXTURE ('muro_quar to_inicial'))...

SECTOR 'room' (MESHOBJ 'walls' (

ZFILL ()PLUGIN ('thing')PARAMS (

VERTEX (-20,-1,-20) VERTEX (-20,-1,20)VERTEX (20,-1,20) VERTEX (20,-1,-20)

...MATERIAL ('muro_quarto_inicial')TEXLEN (5)POLYGON 'down1' (VERTICES (0,1,10,15) MATERIAL

('floors_1_d1n__128') COSFACT(0.8)

TEXTURE (PLANE (floor)))

Page 23: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

23

Protótipo

Atributos e Métodosda classe Simple

Simple

engineg3dkbdloaderobject_regroomvcview

FinishFrame( )HandleEvent( )Initialize( )LoadMap( )SetupFrame( )Simple( )~Simple( )SimpleEventHandler( )Start( )

Page 24: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

24

Protótipo

� Principais métodos de Simple:– Método ::Initialize() (::CreateEnvironment(), ::RequestPlugins(),

::OpenApplication())

– Método ::Start() (loop)

– Método ::HandleEvent() (eventos, ESC)

– Método ::SetupFrame() (::GetTransform(), ::Move(), ::Draw())

– Método ::LoadMap()

Page 25: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

25

Protótipo - Planta Baixa

Page 26: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

26

Protótipo

� Comandos de locomoção no Ambiente

Tecla EfeitoSeta para Cima Movimento para frenteSeta para Baixo Movimento para trásSeta para Direita Movimenta para a direitaSeta para Esquerda Movimenta para a esquerdaPage Up Rotação para cimaPage Down Rotação para baixo

Page 27: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

27

Protótipo

� Tela inicial

� 1-Chuva� 2-Neve

Room

Page 28: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

28

Protótipo

� 3-Fumaça� 4-Fogo

Room -1,2

Page 29: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

29

Conclusões

� Versões (garantias)

� Documentação (compilação, classes, tutoriais)

� DirectX

� Hardware de aceleração gráfica� Aplicações em background

� CS

Page 30: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

30

Extensões

� Detecção de colisão

� Nova plataforma� Outros comandos de teclado

� Multiusuário� Gravidade

Page 31: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

31

Fim

Obrigado !

Page 32: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

32

Classe Simple

Seqüencia de execução dosmétodos de Simple

Page 33: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

33

DirectX

Page 34: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

34

::LoadMap()

Bool Simple::LoadMap (){

// Seta o diretório atual VFS para o plano que dese ja-se carregar.IVFS* VFS = CS_QUERY_REGISTRY (object_reg, iVFS);VFS->ChDir ("/lev/partsys");VFS->DecRef ();

// Carrega o arquivo do plano que é chamado de 'world ' e encontra-se // no diretório C:/CS/Data/PartSys.

if (!loader->LoadMapFile ("world")){

csReport (object_reg, CS_REPORTER_SEVERITY_ERROR,"crystalspace.application.simpmap","Couldn't load level!");

return false;}

engine->Prepare ();...

Page 35: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

35

::SetupFrame()

void Simple::SetupFrame (){// primeiramente, obtém o tempo percorrido do relóg io virtual.

CsTicks elapsed_time = vc->GetElapsedTicks ();// agora, gira a câmera de acordo com o determinado n o teclado (digitado)

float speed = (elapsed_time / 1000.0) * (0.03 * 20);

iCamera* c = view->GetCamera();if (kbd->GetKeyState (CSKEY_RIGHT))

c->GetTransform ().RotateThis (CS_VEC_ROT_RIGHT, speed );if (kbd->GetKeyState (CSKEY_LEFT))

c->GetTransform ().RotateThis (CS_VEC_ROT_LEFT, speed) ;if (kbd->GetKeyState (CSKEY_PGUP))

c->GetTransform ().RotateThis (CS_VEC_TILT_UP, speed);if (kbd->GetKeyState (CSKEY_PGDN))

c->GetTransform ().RotateThis (CS_VEC_TILT_DOWN, speed );if (kbd->GetKeyState (CSKEY_UP))

c->Move (CS_VEC_FORWARD * 4 * speed);if (kbd->GetKeyState (CSKEY_DOWN))

c->Move (CS_VEC_BACKWARD * 4 * speed);

...

Page 36: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

36

::HandleEvent()

bool Simple::HandleEvent (iEvent& ev){

if (ev.Type == csevBroadcast && ev.Command.Code == cscmdPr ocess){

simple->SetupFrame ();return true;

}else if (ev.Type == csevBroadcast && ev.Command.Code == cs cmdFinalProcess){

simple->FinishFrame ();return true;

}else if (ev.Type == csevKeyDown && ev.Key.Code == CSKEY_E SC){

iEventQueue* q = CS_QUERY_REGISTRY (object_reg, iEve ntQueue);if (q){

q->GetEventOutlet()->Broadcast (cscmdQuit);q->DecRef ();

}return true;

...

Page 37: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

37

::Initialize()

bool Simple::Initialize (int argc, const char* const a rgv[]){

object_reg = csInitializer::CreateEnvironment (argc, ar gv);if (!object_reg) return false;csDebuggingGraph::SetupGraph (object_reg);

if (!csInitializer::RequestPlugins (object_reg,CS_REQUEST_VFS,CS_REQUEST_SOFTWARE3D,CS_REQUEST_ENGINE,CS_REQUEST_FONTSERVER,CS_REQUEST_IMAGELOADER,CS_REQUEST_LEVELLOADER,CS_REQUEST_REPORTER,CS_REQUEST_REPORTERLISTENER,CS_REQUEST_END))

{

...

Page 38: Protótipo de um Ambiente 3D para Jogos, utilizando a ...campeche.inf.furb.br/tccs/2002-I/2002-1rodrigopeterap.pdf · Space com DirectX e linguagem C++ ... Introdução (Jogos Eletrônicos,

38

Protótipo - Classe Simple (código)

class Simple{private:

iObjectRegistry* object_reg;iEngine* engine;iLoader* loader;iGraphics3D* g3d;iKeyboardDriver* kbd;iVirtualClock* vc;iSector* room;iView* view;static bool SimpleEventHandler (iEvent& ev);bool HandleEvent (iEvent& ev);void SetupFrame ();void FinishFrame ();bool LoadMap ();

public:Simple ();~Simple ();bool Initialize (int argc, const char* const argv[]);void Start ();

};