58
Bruno Pereira Evangelista www.brunoevangelista.com

Tutorial 3dgames

Embed Size (px)

Citation preview

Bruno Pereira Evangelistawww.brunoevangelista.com

2

XNA é um framework que possibilita uma alta produtividade no desenvolvimento de jogos

Hoje mostraremos como iniciar o desenvolvimento de um jogo 3D com o XNA

Não, nós não criaremos um jogo completo! =(

Mas mostraremos passo a passo vários conceitos utilizados na criação de jogos 3D

3

Alguns dos tópicos abordados

Iniciando um novo jogo

Adicionando assets ao jogo

Desenhando malhas 3D

Movendo objetos e câmera

Configurando luzes

Colisão

Vamos começar com partes mais teóricas seguindo para partes mais práticas !!!

4

Software

Visual Studio C# Express + Service Pack 1.0

.NET Framework 2.0 SDK

Game Studio Express Refresh 1.0

DirectX 9 Runtime (Dezembro 2006)

Hardware

Placa gráfica compatível com Shader Model 1.1

Recomendado Shader Model 2.0

GeForce 5200 ou superior!

5

Criando um novo projeto do XNA Game Studio Express

6

Classe base para todos os seus jogos

Inicializa todos os recursos necessário

Possui um game loop definido

Single Thread

Passos fixos ou variados de tempo

7

Métodos

Initialize

Load/UnloadGraphicsContent

Update

Draw

Objetos/Serviços

GraphicsDeviceManager

ContentManager

8

9

Objetos do mundo real podem ser representados computacionalmente através da malha de sua superfície

Uma bola pode ser representada através da superfície de uma esfera

10

11

12

O XNA possui um pipeline de conteúdo, que pode ser utilizado para compilar vários assets do jogo

Os assets são importados em seu formato original, e transformado em um formato XML padrão

Em seguida os assets são processados, gerando objetos gerenciados de jogo

Por fim, eles são compilados, gerando binários otimizados para uso no windows ou Xbox 360

13

14

Para que um asset seja processado pelo pipeline de conteúdo basta adicioná-lo ao projeto

Em seguida ele pode ser carregados através do gerenciado de conteúdo (ContentManager)

HORA DE IMPLEMENTAR

15

16

Para gerarmos uma imagem da malha 3D carregada, a mesma precisa ser renderizada

No XNA não existe o pipeline de renderização fixo

É preciso fazer o uso do pipeline programável, utilizando Shaders! xD

Você ainda não domina a programação de shaders?

Não se preocupe, o XNA possui classes para abstrair a programação de shaders

17

Encapsula alguns dos algoritmos do fluxo de renderização fixo utilizando shaders

Simula algumas funções do pipeline fixo

Suporta os modelos de shader 1.1 e 2.0

Possui suporte a iluminação (vértice/pixel), texturização, fog e outros

Ainda muito limitada: Não suporta multi-texturização, luzes pontais ou spot e outros

18

Uma instância do BasicEffect é criada para cada modelo carregado que não possui um efeito

Para cada material "básico" exportados é criado um BasicEffect quando a malha é carregada

Ferramentas como o 3D Studio Max permitem exportar outros materiais, como efeitos

19

O que ainda precisamos fazer?

Criar e configurar a câmera pela qual o mesmo é observado

A câmera pode ser configurada através da classe BasicEffect

20

Representadas através das matrizes de projeção e visão

Projeção: Como a cena tridimensional será projetada para que possamos observá-la em um monitor 2D

Visão: Posição e orientação da câmera no mundo

A classe Matrix do XNA possui vários métodos para auxiliar a criação de uma câmera

21

Projeção Perspectiva (Similar ao olho humano)

XNA: Matrix.CreatePerspectiveFieldOfView

22

Visão (Posiciona e orienta a câmera )

XNA: Matrix. CreateLookAt

Posição do Olho

Vetor cima

Posição Observada

23

HORA DE IMPLEMENTAR

24

Sistema de coordenadas

Diferente do DirectX o XNA utiliza o sistema de coordenadas da mão direita

Sistema damão esquerda

Sistema damão direita

25

Ordenação de primitivas

Diferente do DirectX e do OpenGL, a ordenação de primitivas padrão do XNA é Clockwise (CW)

V1

V3 V2

V1

V2 V3

Clockwise Counterclockwise

26

27

Um dos principais elementos responsáveis em adicionar realismo a uma cena

28O

MN

IDIR

ECIO

NA

LD

IREC

ION

AL

HOLOFOTE

29

COMPONENTEAMBIENTE

COMPONENTEDIFUSA

COMPONENTEESPECULAR

Equação de Iluminação de Phong

30

IMAGEM FINALADIÇÃO DE TODAS AS COMPONENTES

31

No XNA a iluminação pode ser configurada através da classe BasicEffect

Possui suporte apenas a fontes de luz direcionais

Suporta até três fontes de luz =(

Utiliza o equação de Blinn-Phong para iluminação

Utilizando shaders você pode criar seu modelo de iluminação e suas fontes de luz!

32

HORA DE IMPLEMENTAR

33

34

Tipos de entradas suportados pelo XNA

Controle Xbox 360 (Windows e Xbox 360)

Teclado (Windows e Xbox 360)

Mouse (Windows)

35

Classes de estado dos dispositivos

GamePadState

KeyboardState

MouseState

Classes dos dispositivos (Utilizadas para ler o estado dos mesmos)

GamePad

Keyboard

Mouse

36

HORA DE IMPLEMENTAR

37

Existêm vários tipos de câmeras diferentes que podemos utilizar em um jogo

Câmera em primeira pessoa / terceira pessoa

Câmera fixa / dinâmica

Câmera com trajeto animado

Vamos implementar uma câmera para o jogo

Câmera em terceira pessoa

Segue o personagem a uma distância fixa

Pode ser rotacionada

38

HORA DE IMPLEMENTAR

39

40

O pipeline de conteúdo do XNA possui suporte nativo aos formatos de modelo .FBX (Autodesk) e .X (DirectX)

Nesta seção mostraremos como é fácil exportar modelos e carregar os mesmos no XNA

HORA DE IMPLEMENTAR

41

42

Existem várias maneiras de testar a colisão entre objetos

Utilizar a malha real do objeto

Utilizar uma malha simplificada do objeto

Utilizar o fecho convexo do objeto

Utilizar volumes de colisão

43

Esferas AABB OOBB MalhaTriângulos

Mais rápido

Mais preciso ?

44

O XNA já possui várias classes que podem auxiliar no cálculo de colisões

BoundingFrustum

BoundingSphere

BoundingBox (AABB)

Plane

Ray

45

Cada malha processada pelo pipeline de conteúdo possui um BoundingSphere

Mas muitas vezes desejamos usar outros sólidos de colisão

Além disso, não é gerado um sólido de colisão para todo o modelo

Para gerarmos outros sólidos de colisão podemos extender o processador de modelos do XNA

46

HORA DE IMPLEMENTAR

Utilizar novo processador de modelos

Adicionar colisão com o chão e objetos

47

48

Para adicionar um pouco mais de ação ao jogo vamos deixar que o jogador possa pular

Para isso basta adicionar uma gravidade a cena

Note que não queremos simular uma gravidade real

Queremos apenas que o efeito final seja agradável ao jogador

Além disso, utilizar aceleração pode causar problemas no nosso sistema de colisão

49

HORA DE IMPLEMENTAR

50

51

O XNA possui classes que facilitam a escrita na tela utilizando qualquer tipo de fonte

As fontes são criadas a partir de arquivos SpriteFont

Arquivo XML que descrevem como construir uma textura para uma determinada fonte de texto

Podem ser criados pela IDE do GameStudioExpress

Os SpriteFonts são assets que são carregados normalmente pelo pipeline de conteúdo

52

Para desenharmos objetos 2D como sprites e textos podemos utilizar a classe SpriteBatch

Realiza o desenho dos objetos em lote, permitindo um aumento de desempenho

Encapsula todo o processamento necessário para desenhar os objetos utilizando shaders

53

HORA DE IMPLEMENTAR

54

55

Objetivo do jogo

Coletar o maior número de esferas até o tempo acabar

Não muito desafiador, mas não vamos começar fazendo um “Gears of War” ^^

NÃO DA MAIS TEMPO DE IMPLEMENTAR

VAMOS VER O JOGO! =)

56

Projeto de jogo de tiro em primeira pessoa desenvolvido com XNA

Demo criado em 1 mês

Equipe de 3 pessoas

57

Criar jogos com o XNA é fácil e divertido

Não perca mais seus dias criando

Códigos para criar e gerenciar janelas

Importadores de modelos, texturas, etc

Classes de matemática

Loop de jogos

E várias outras coisas chatas

Crie algo novo já na sua primeira linha de código !!!

58

Bruno P. [email protected]

Home Page

www.brunoevangelista.com

"De fato, que aproveitará ao homem ganhar o mundo inteiro mas perder sua alma?" Mateus 16, 26