Guia do iniciante na
programação de jogos com C++

Dos conceitos básicos à programação 3D

 

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:

  • O compilador Visual C++ 6.0 ou superior;

  • DirectX 9 versão Summer 2004.

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 tr
ansparê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

 

Voltar