|
C++ é atualmente a linguagem padrão na criação de
jogos eletrônicos considerados top de linha. Por ser multi-plataforma, rápida e
de sintaxe favorável à programação de alta performance, vêm sendo utilizada no
desenvolvimento de mais de nove em cada dez jogos profissionais de boa vendagem
e aceitação.
Em conjunto com o DirectX 9 - API da Microsoft
voltado ao desenvolvimento de aplicações multimídia de alta performance - C++
pode ser usada para programação de jogos 3-D em tempo-real com todos os recursos
da computação gráfica atual. Este Curso é dividido em duas partes, a primeira
traz uma introdução à programação com C++, desde os fundamentos aos conceitos da
programação orientada a objetos necessários para o inicio do aprendizado com o
pacote de desenvolvimento da Microsoft. Em sua segunda parte, o livro introduz o
leitor à programação para Windows com Direct3D 9, fornecendo conceitos gerais da
computação gráfica e a lógica do desenvolvimento de jogos, como sistemas de
câmera interativa, detecção de colisão, personagens animados e criação de
cenários 3-D.
Instrutor do curso: André Santee
Requisitos para fazer o curso:
Ter instalado
os seguintes softwares:
Obs.: Caso
você não tenha o software instalado em seu equipamento, você pode adquirir a
versão original
através do revendedor:
http://www.microsoft.com/brasil/msdn/Produtos/Default.mspx
Sobre o curso:
Conteúdo
Método de Ensino
Fotos de trechos do curso
Fotos de atividades
realizadas durante o curso
Grade
Conteúdo
Capítulo 1: Introdução a
linguagem C/C++
O primeiro capítulo apresentará a
linguagem C++ e indicará as diferenças entre C e C++. Aprenderemos como utilizar
o compilador Micorosft Visual C++, além de constatar como é o funcionamento dos
operadores matemáticos e de alguns conceitos de entrada e saída de dados.
Capítulo 2:
Conceitos básicos da linguagem
C/C++
Neste capítulo, veremos quais são as operações lógicas,
fundamentais no desenvolvimento de qualquer software, utilizadas para mudar o
fluxo da aplicação. Também verificaremos como utilizar os diversos tipos de laço
que a linguagem oferece.
Capítulo 3:
Funções e sua relação com as variáveis
Este capítulo é voltado à aplicação de funções em C++,
mostrando o conceito de programação estruturada e a forte relação que existe
entre funções e variáveis.
Capítulo 4:
arrays, ponteiros e strings
Este capítulo falará sobre três
assuntos importantes e muito praticados na programação com C++: arrays
(conhecidos também como matrizes ou vetores), os ponteiros e as strings.
Entenderemos também como é a organização dos dados na memória do computador.
Capítulo 5:
tipos de dados definidos pelo programador e introdução a
orientação a objetos
Neste capítulo, veremos o que
são e para que servem todas as aplicações das estruturas de dados, além das
classes, e uma pequena introdução à programação orientada a objetos, com herança
de classes e mais conceitos tratados como elementos do polimorfismo.
Capítulo
6:
introdução teórica a
computação gráfica
Este capítulo traz diversos
elementos-chave da computação gráfica em tempo real. Com textos e exemplos
teóricos poderemos entender como funcionam os gráficos e uma visão geral do que
se passa no pipeline, como texturização, iluminação e os mais diversos efeitos.
Capítulo
7:
Win32 e programação com Direct3D
Este capítulo
fará uma introdução à programação de janelas para Windows. criando nosso
primeiro dispositivo do Direct3D e ensinando técnicas de renderização em tempo
real, como transparência, iluminação, neblina, multitexturização, filtragem e
operações com matrizes para a transformação da cena e projeção.
Capítulo
8:
Renderização simples com Direct3D
Este capítulo
irá mostrar como renderizar primitivas geométricas com Direct3D. Será visto como
armazenar a geometria da cena na memória de vídeo, assim como renderizar
polígonos com vértices indexados.
Capítulo 9:
renderizando polígonos texturizados
Neste capítulo
veremos como mapear texturas em vértices, carregá-las de arquivos como BMP, JPG
e TGA e aplicá-las aos polígonos. Também vamos aprender a ativar filtros que
podem aumentar a qualidade de nossas cenas 3D.
Capítulo
10: Alpha blending
Com o efeito de transparência
que o alpha blending possibilita, podem ser reproduzidos diversos elementos
físicos, reais ou não. Este capítulo abordará esse tópico, levantando os
principais tipos de blending que podemos utilizar.
Capítulo
11: Transformações geométricas da cena 3D
Este capítulo irá descrever as
principais transformações que podem ocorrer na cena 3D, que são translação,
rotação e escala, e o posicionamento da câmera. Irá mostrar também como preparar
as matrizes e definilas no dispositivo para que o Direct3D faça uso dessas
transformações.
Capítulo
12: Propriedades visuais dos objetos
Este tópico vai abordar alguns tópicos da API Direct3D
que tratam das propriedades visuais de cada objeto, assim como a iluminação
realizada em cada vértice e o efeito neblina.
Capítulo
13: Elementos bidimensionais
Não podemos esquercer-nos de que os elementos 2D
também são muito importantes, para apresentar determinado dado ao jogador ou
exibir alguma entidade gráfica. Este capítulo apresentará duas importantes
ferramentas da biblioteca de ajuda do Direct3D, a D3DX, que tratam do assunto.
Capítulo
14: Fundamentos da programação de jogos
O objetivo deste capítulo é mostrar como funcionam
alguns elementos dos jogos, como controle de dispositivos de entrada, animação e
controle e objetos pelo teclado e mouse.
Capítulo
15: Carregando objetos 3D
Neste capítulo veremos como carregar
arquivos que armazenam personagens 3D animados e como uma classe pode ser criada
para facilitar essa tarefa.
Capítulo
16: Controlando personagens
Este capítulo mostrará como se efetua o
controle de personagens via teclado e também os diversos tipos de câmeras que
possuem ligação direta com o gênero dos jogos.
Capítulo
17: trabalhando com mapas 3D
Neste capítulo, criaremos um sistema de
geração de cenários 3D muito simples, porém muito interessante e que ajudará a
compreender algumas técnicas e algoritmos ligados à lógica tanto da programação
em geral como gráfica e de jogos.
Capítulo
18: Sistemas de colisão
Neste capítulo veremos conceitos de colisão entre
primitivas geométricas tridimensionais e também entre retas e polígonos.
Capítulo
19: Adicionando objetos 3D à cena
Este capítulo mostrará como desenvolver
métodos para tratamento de objetos como fontes de luz ou elementos de simples
função decorativa para adicionais mais vida a cenas 3D.
Capítulo
20: Músicas e efeitos sonoros
Um jogo com belos gráficos é incompleto
sem uma boa trilha musical e efeitos sonoros bem selecionados.
Capítulo
21: Breve introdução à IA
apesar de envolver mais conhecimento e prática em
lógica da programação do que alguma teoria constante que se aplique a todos os
casos, este livro não seria completo se não abordasse um tema tão abrangente
como o desenvolvimento de jogos.
Capítulo
22: Projetando o jogo
Este capítulo dará algumas dicas sobre
a etapa de design do jogo, onde serão definidas todas as características do
projeto, da aparência gráfica aoa elementos da jogabilidade, características
técnicas e visuais dos personagens e cenários.
Capítulo
23: Programando o jogo
Neste capítulo veremos algumas dicas de programação
para organizar o código do jogo de modo que se torne elegante, legível e de
fácil manuseio ao mesmo tempo.
Método de ensino
Ao adquirir o
curso, o aluno recebe um livro com o qual acompanhará o curso. O mesmo material
(texto) que o aluno encontra no livro, também encontrará online em nosso site, e
poderá acessar a partir de qualquer computador que tenha acesso à internet.
Através do site, o aluno também encontra a opção para se fazer download dos
arquivos utilizados como exemplos no material.
Exercícios / Avaliações:
Após estudar o material correspondente à cada aula, o aluno deverá acessar o
site, e fazer os exercícios propostos pelo instrutor. Os exercícios funcionarão
como avaliação, e somente receberão "certificado", os alunos que
fizerem com êxito os exercícios propostos.
Esclarecimento de Dúvidas:
Sempre que o aluno tiver dúvidas relacionadas ao material estudado, deverá
enviar uma mensagem para o instrutor através de um fórum exclusivo para sua
turma do curso, detalhando o problema encontrado. Ao enviar a mensagem,
automaticamente o instrutor recebe uma notificação de seu pedido de suporte, e
acessará o fórum para responder à sua dúvida. Através deste mesmo fórum, você
também pode interagir com os demais alunos da sua turma ou de outras.
Fotos de
alguns trechos do curso

Fotos de
atividades realizadas durante o curso

Grade
Capítulo 1: Introdução a
linguagem C/C++
Histórico
Compilador?
Tipos de compiladores
C ou C++?
O Visual C++
Oi mundo!
Iniciando
Primeiro programa
Analisando o código
Analisando o código
Outras constantes
Variáveis
Tipos de variáveis
Declarando variáveis
Atribuindo valores
Usando variáveis
Constantes
Regras
Declarações múltiplas de variáveis
Mais sobre seu compilador
Abrindo projetos
Erros de compilação
Fazendo executáveis
A versão Release
Operadores matemáticos
Apronfundando
Usando parênteses
C-Reduzido
Incremento e decremento
Pós-fixado
Pré-fixado
O operador de Negação
Comentários
Diretivas
#include
#define
Obtendo valores do teclado
printf e scanf
printf
Especificador de formato
scanf
Aula 2:
Conceitos básicos da linguagem
C/C++
O comando if
Os operadores relacionais
Várias instruções no escopo if
Operadores lógicos AND e OR
Operador lógico AND (&&):
Operador lógico OR (||):
O comando ELSE
Verdadeiro e falso
O Operador NOT (!)
Variáveis do tipo bool e o if
O operador ‘?’
O SWITCH
Regras básicas
switch aninhado
switch sem break
Os laços WHILE e DO WHILE
O comando break
O laço DO WHILE
O laço FOR
Laço regressivo
Pulando valores no laço for
Laço infinito
CIN o FOR
O comando continue
Aula 3:
Funções e sua relação com as variáveis
Funções
O que são funções?
Qual a vantagem de utilizar funções?
Programando funções
Analisando o código
Funções com argumento
Funções com valor de retorno
Funções do tipo void
Funções inline
Funções como parâmetro do if
Funções como argumento para
outras funções
Sobrecarregando funções
Valores default e omissão de argumentos
Observações
Recursividade em funções
Manipulando variáveis externas
As relações entre funções e variáveis
Variáveis externas
Variáveis estáticas
Constantes
Aula 4:
arrays, ponteiros e strings
Arrays
Atribuindo valores durante a declaração
Ponteiros
Como as variáveis são organizadas
Declarando ponteiros
Encontrando endereços de variáveis
Manipulando variáveis via ponteiros
Ponteiro para ponteiro
Apontando arrays
Endereço de uma array
Manipulando arrays por ponteiro:
Uso de ponteiros em funções
Arrays de ponteiro
Recebendo arrays em funções
Matrizes multi-dimensionais
Strings de texto
Declarando strings
Estrutura de uma string
Passando strings como argumento
Copiando strings com strcpy
Concatenando strings com strcat
Casting em C
Casts para conversão em variáveis
Ponteiros do tipo void
sizeof
#define com argumentos
Cuidados a serem tomados
O comando typedef
Alocação dinâmica
delete[]
delete
Aula 5:
tipos de dados definidos pelo programador e introdução a orientação a objetos
Estruturas
Introdução
Conceitos básicos de estruturas em C++
Declarando variáveis de estruturas
Acessando membros de estruturas
Estruturas aninhadas
typedef e structs
Funções membro
Definindo funções externamente
Ponteiros para estruturas
Transferindo valores de estrutura para estrutura
Funções que retornam estruturas
Arrays de estrutura
new e delete em structs
Os construtores
Sobrecarregando construtores
Os destrutores
Analisando o código
Listando valores
Classes: a base da linguagem C++
Declaração de classes
Herança de classes
Mais sobre herança de classes
Herança com public
Herança com protected
Herança com private
Classes amigas
Sobrecarga de operadores
Corpo da operação declarado fora da classe
Mais sobrecarga de operadores
O ponteiro this
Enumerando constantes
Mais sobre pré-processos e compilação condicional
#ifdef
#else
Compilação condicional com expressões
#elif
A diretiva #undef
Uniões
Aula 6:
introdução teórica a computação
gráfica
Conceitos básicos de espaço 2D
Conceitos básicos de espaço 3D
Mão-esquerda e Mão-direita
Câmera
Polígonos
Vetores
Normalizando vetores
Vetores cruzados
Produto escalar
Rotação, translação e escala
Translação
Rotação
Escala
Matrizes
Matriz identidade
Transformando matrizes
Escalando matrizes
Transladando matrizes
Rotacionando matrizes
Multiplicando matrizes entre matrizes
Espaço de modelo para espaço de
mundo
Direct3D? OpenGL? API?
Termos que você precisa saber
Renderização
Rasterização
Clipping
Depth-Buffer
Pipeline
Alpha ou alpha blending
Neblina
Vertex Shaders
Pixel Shaders
Modos de classificação de vértices e triângulos
Triangle Strips
Triangle Fans
Triangle list
Técnicas de culling
Front e backface culling
Clockwise culling
Counter-clockwise culling
Modos de renderização
Flat shaded
Gouraud shading
Wireframe
Normais
Luzes
Luz ambiente
Luz posicionada
Luz direcional
Holofote
Material
Difusão
Ambiente
Especular
Potência
Texturas
O que é uma textura
Texels
Multitextura
Filtros de textura
Minification
Magnification
Mip-mapping
Front buffer e back buffer
Quadros por segundo (FPS)
Motor?
Padrões da programação em C++
Notação húngara
Escrevendo em inglês
Organização do código
Aula 7:
Win32 e programação com Direct3D
Win32 - a API do Windows
DirectX: o que é?
Primeiros contatos com o DirectX 9
Nossa primeira janela
Bibliotecas e arquivos cabeçalho
Função MsgProc
A função WinMain e criação da janela
Inicializando o Direct3D
Criando o dispositivo
Encerrando a aplicação
Desenhando primitivas
O formato de vértices
Criando o buffer
Desenhando o triângulo
DrawPrimitiveUP: renderização sem buffers
Index Buffers
Criando um Index Buffer para Direct3D
A criação do Vertex Buffer
Renderizando o buffer indexado
Vantagens de utilizar index buffer
Desvantagens de utilizar index buffer
Vértices indexados sem buffers
Texturas
D3DXCreateTextureFromFileEx
Desligando a textura
Limpando a memória
Filtros nas texturas
Minification
Magnification
Mip-mapping
Transparência - Alpha blending
Alpha aditivo
Alpha de subtração
Color keying
Multitextura
Translação
Rotação
Escala
Câmera
D3DXMatrixLookAt
Materiais
Iluminação por vértice
A estrutura D3DLIGHT9
Luz direcional
Luz Holofote
Luz posicionada
Registrando as luzes
Efeito de névoa
Ligando a neblina
Definindo as distâncias
Definindo a cor
Ligando a neblina por vértice
Ligando a neblina por pixel
Definindo a densidade
Desenho de textos
Sprites 2D na tela 3D
Aula 8:
programação de jogos - Parte 1
Tela cheia em Direct3D
Dispositivo de entrada: teclado
Animações interativas
Dispositivo de entrada: mouse
SetCursorPos
GetCursorPos
Movimento do cursor
Billboards
Carregando arquivos da memória
Os arquivos MD2
Carregando arquivos de modelo animado
Carregando o cabeçalho
Carregando o cabeçalho
Coordenadas de textura
Carregando as faces
Transformações
Configurando os quadros
Animação
Convertendo para o cache de vértices do Direct3D
Calculando as normais
Deletando objetos sem mais utilidade
Criando o vertex buffer dinâmico
Renderizando modelos animados
Trabalhando com os quadros
Incrementando os quadros
Interpolação: obtendo o objeto final
Copiando dados para o buffer
E finalmente... renderizando!
Renderizando quadros específicos
Limpando a memória
Aplicando o skin aos modelos
Utilizando a classe MD2Loader
Desenhando quadros específicos
Trabalhando com armas para personagens
Movendo os modelos na cena
Movimento independente do FPS
Calculando a taxa de quadros por segundo
Função para movimento independente do FPS
Câmeras em terceira e primeira pessoa
Câmera em terceira pessoa #1
Câmera em terceira pessoa #2
Câmera em terceira pessoa #3
Câmera em primeira pessoa
Geração de cenários 3-D
A estrutura do sistema de geração de mapas
SG_SURFACE
SG_TILES
SG_RENDERDATA
Criando o buffer de vértices para os tiles
Carregando as superfícies dos tiles
Definindo os tiles
Declarando o tilemap
Renderizando o mapa
Frustum culling
Montando os frustum planes
Operações com os planos
Checando esferas no frustum
Checando Retângulos no frustum
Utilizando a classe FrustumCulling
Luzes da cena
Estrutura da luz por vértice
Estrutura geral do mapeamento de iluminação
Renderizando tiles com iluminação em multitextura
Frustum culling para os mapas
Criando as luzes em tempo real
Culling nas luzes
Utilizando a classe cSceneGen
Aula 9:
programação de jogos - Parte 2
Sistemas de colisão
Colisão entre esferas
Dica de otimização
Colisão entre cilindros
Colisão entre caixas
Colisão entre reta e triângulo
Colisão entre segmento e triângulo
Colisão com o mapa
Encontrando a altura do terreno
Transformando apenas o segmento
Colisão com as paredes
O problema dos múltiplos vetores
Colisão utilizando apenas um vetor
Fontes de luz
A classe SG_OBJECT
Método SG_3DOBJECT::LoadObject
Método SG_3DOBJECT::RenderPass
A estrutura SG_LIGHTSOURCE
Posicionando as luzes automaticamente
Colisão com os objetos
Inteligência artificial
Patrulha
Avistando um invasor
Reação
Atacar
Com quantos paus se acaba com um personagem
Efeitos sonoros com DirectSound
Criando o objeto CSoundManager
Criando o objeto CSound
Funções auxiliares
Músicas com DirectMusic
Criando o CMusicManager
Funções auxiliares
|