Upload
ricel-leite
View
31
Download
0
Embed Size (px)
Citation preview
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!
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
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
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
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
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
22
Visão (Posiciona e orienta a câmera )
XNA: Matrix. CreateLookAt
Posição do Olho
Vetor cima
Posição Observada
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
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!
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
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
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
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
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
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
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
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