1 técnicas gráficas para jogos eduardo sampaio rocha pedro henrique macedo börje karlsson geber...

96
1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

Upload: yan-cavaco

Post on 07-Apr-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

1

Técnicas Gráficas para Jogos

• Eduardo Sampaio Rocha• Pedro Henrique Macedo• Börje Karlsson• Geber Ramalho• Vicente Vieira Filho

Page 2: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

2

Page 3: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

3

Representação da Cor nos Computadores Para cada pixel, um conjunto de bits é usado

para representar a cor. Geralmente o sistema usado é o RGB.

Pixel

BBP1 bit – 2 cores8 bits – 256 cores (paleta)16 bits – 65536 cores24 bits – 16.7 milhões de cores

Page 4: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

4

Paleta (8 bpp) Rápido Fácil de mudar as cores de toda a tela

Pixel values(0-255)

12 5 29

6250

Índice Verme. Verde Azul0 100 5 361 52 36 1612 29 200 161

.

.

.

6 0 255 100...

255 100 100 1008 bits 8 bits 8 bits

24 bits

8 bits

Page 5: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

5

16 bpp – High ColorAlpha(transparência).5.5.5

X(don’t care).5.5.5

5.6.5

A R4 R3 R2 R1 R0 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0

X R4 R3 R2 R1 R0 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0

R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0

Page 6: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

6

24/32 bpp8.8.8

Alpha (8).8.8.8

X(8).8.8.8

Alpha Vermelho Verde AzulA7-A0 R7-R0 G7-G0 B7-B0

Don’t care Vermelho Verde Azul

xxxxxxxx R7-R0 G7-G0 B7-B0

Vermelho Verde Azul

R7-R0 G7-G0 B7-B0

Page 7: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

7

Conceitos Básicos

• Sprite• Tile e tilemap• Operações (blitting, flipping, clipping,

blending, scrolling,...)

Page 8: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

8

Imagem – Sprites & BackgroundSprite – imagem de tamanho arbitrário que

é usado por agentes (se move na tela) ou por objetos fixos.

Background – “Pano de Fundo”• Baseado em Cores• Baseado em textura• Tiles

Page 9: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

9

Sprites - Animação

Page 10: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

10

Sprites & Background

Sprites

Page 11: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

11

Sprites - EvoluçãoAnos 80 ...

Anos 90 ...

Últimos 4 anos ...

Page 12: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

12

Background - Textura

Page 13: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

13

Background - Tiles

Podem ser animados

Page 14: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

14

TileMapsUma estrutura contendo informações sobre

como o mundo se parece, e sobre os objetos e agentes imersos no mundo.

Ex:struct TILEMAPSQUARE {

char BasicTerrain; //0=ocean;1=plains;2=forest; // 3=hills;4=mountains;uchar RoadFlags; //0=north;1=northeast; etc.uchar RiverFlags; //0=north;1=northeast; etc.UINT* Unit;

}int iTileMap[WIDTH][HEIGHT];

Page 15: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

15

Tilemap

Pode conter mais informação do que o tipo de tile• custo de atravessar, ...

1 1 1 1 1 1 13 3 3 3 3 3 13 3 3 2 2 3 11 1 3 2 2 3 11 1 3 3 3 3 11 1 1 1 1 1 1

1 = pedra2 = água3 = pista

Page 16: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

16

Localização/movimentação de SpritesSprites = objetos

• coordenadas independentes do background• detecção de colisão entre objetos• problema: pode custar caro...

Sprites amarrados ao mapa de tiles• movimentação• colisão testada no tilemap• problema: atualizar tilemap

Híbrido: sprites = objetos e mundo = mapa de tiles• Mais usado• detecção de colisão entre objetos

Page 17: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

17

Exibição via blittingTransferência de mapa de bits (blitting):

operação de cópia (central!!)Da RAM (lenta e abundante) para VRAM

(rápida e escassa) ou da VRAM para a própria VRAM

Page 18: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

18

Page Flipping e double buffering Como é uma operação “cara” quando feita por software,

utiliza-se page flipping Para evitar flickering, usa-se mais de um buffer

(backbuffer ou double bufrer)

Page 19: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

19

Raster OperationsAo transferir um bloco de bits, nós podemos :

• Simplesmente jogar o bit de origem no destino• Compor o bit de origem com o já existente no

destino usando as operações de AND, OR e XOR.

Page 20: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

20

Transparência

MÁSCARAFUNDOAND

MÁSCARA

F•AND•MXORSPRITE

Page 21: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

21

Transparência – Source Color Keying A idéia é usar uma cor que não é usada na figura e

utilizá-la como “cor transparente”.

if ( src != colorkey )    dst = src;else    dst = background;

Page 22: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

22

Blending

alpha = sprite.alpha / MAX_ALPHA;beta = 1.0 - alpha;

dst.red = (src.red * alpha) +(background.red * beta);

dst.green = (src.green * alpha) +(background.green * beta);

dst.blue = (src.blue * alpha) +(background.blue * beta);

Page 23: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

23

Game Spaces Space

• Um espaço bidimensional de tamanho e forma arbitrárias World Space (mundo)

• Espaço composto de todos os objetos/sprites. View Space (janela visível)

• Espaço geralmente do mesmo tamanho do screen space, mas com coordenada do ponto esquerdo superior igual a (0,0)

Screen Space• Espaço na tela usado para renderizar a área do jogo (não

inclui bordas, status panels, barra de menu, etc.)• coordenadas em relação à tela (haverá ajustes!)

Page 24: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

24

Game Spaces (cont.)

Page 25: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

25

ÂncoraUma correlação entre um ponto de um

espaço (geralmente (0,0)) e um outro espaço.

ScreenSpace View

Space

Âncora (16,15)

Page 26: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

26

ÂncoraTambém usada para colocar um Sprite em

um tile

Page 27: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

27

ClippingO que cai fora da janela visível é cortado

Page 28: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

28

Scrolling - TilesGeralmente baseado na

entrada do usuário.Deslocamento do view

space em relação ao world space

Page 29: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

29

Scrolling - TexturaFundo repetidamente

desenhado.• janela com velocidade fixa• ou baseado na entrada do

usuário

Page 30: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

30

ScrollingA partir de quando fazer o scroll?

• Centrado na “unidade” que está sendo controlada no momento -> região central

• Janela visívelDe quanto faz o scroll?

• O suficiente para recolocar “unidade”em área visível (ou região central)

• Tela visivel inteira

Page 31: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

31

Tilesets

Page 32: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

32

Tilesets Um conjunto de tiles. Como é ineficiente colocar um

tile em cada arquivo, nós simplesmente agrupamos um conjunto lógico de tiles e colocamos no mesmo arquivo gráfico.

Page 33: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

33

Trabalhando com TilesetsPara trabalharmos com tilesets, nós

precisamos disponibilizar mais algumas informações além da gráfica contida no arquivo. Por exemplo, o tamanho de cada tile.

Estas informações podem ser obtidas:• Colocando-as junto com o código (hardcoded)• Disponibilizando um arquivo texto para cada

tileset.• Colocando-as dentro do arquivo gráfico

Page 34: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

34

Criando um Template para os TilesetsPara colocar informações no arquivo gráfico,

vamos criar um padrão.A idéia é utilizar um frame para cada tile, e

neste frame colocar as informações necessárias embutidas em cada pixel

Algumas informações:• Comprimento e largura• Quina de cada tile cor de transparência• Âncora de cada tile

Page 35: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

35

Template para TilesetsInformações Parâmetros

Page 36: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

Transparência e Quina

Moldura

Âncora

Tamanho da Figura

Âncora Interna

Informações

Page 37: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

Altu

ra (V

erde

)

Largura (Verde)Âncora

Parâmetros

Page 38: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

38

Mais Tilesets

Page 39: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

39

Gerenciando a Transição de Tiles

Como tornar a transição entre os tiles mais suave?

Page 40: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

40

Transição de Tiles – Solução 1

Criar tiles de transição entre os vários tipos.

Criando 8 pontos de transição entre 2 tipos diferentes (ex. agua e terra), seriam necessários 28=256 tiles.

Tendo 8 tipos de tiles, seriam 7x8x256 = 14336 tiles. Impossível !!!!!!!!

Page 41: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

41

Transição de Tiles – Solução 2Criar uma precedência, ou seja, quando dois

tipos se encontram, o que tiver maior precedência, sobrepõe o outro.• Exemplo: selva, floresta, montanha, morro, mangue,

deserto, campo e água

Isto garante que podemos fazer um template para cada tipo e depois podemos compor usando a transparência do bitblt.

Page 42: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

42

Transição de Tiles - Solução 2Dividir os pontos de transição em 2 grupos:

aresta e quina. Isto leva a 32 tiles:

Page 43: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

43

Transição de Tiles - Solução 2

No total seriam 32 * (8-1) = 224 tiles

Page 44: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

44

Tiles: blending de terreno Z

oo ty

coon

sem

ble

ndin

g

Page 45: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

45

Tiles: blending de terreno Z

oo ty

coon

com

ble

ndin

g

Page 46: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

46

Motores 2D - Java J2DA!

http://j2da.sourceforge.net/index.phpGOLDEN T GAME ENGINE

http://www.goldenstudios.or.id/products/GTGE/index.php

Planetationhttp://www.scottshaver2000.com/template/template.php?page=planetation_main

GAGE - Genuine Advantage Gaming Enginehttp://java.dnsalias.com/

Page 47: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

47

Jogos Isométricos

Page 48: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

48

Projeções AxonométricasNão possuem “ponto de fuga”Linhas que são paralelas no espaço 3D

continuam paralelas na figura 2DObjetos distantes tem o mesmo tamanho

que objetos próximos

Page 49: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

49

Projeções Isométricas e Jogos São projeções axonométricas onde os eixos x,y e z

possuem a mesma métrica• se projetarmos um cubo, todas as arestas terão o

mesmo tamanho. Os jogos isométricos geralmente são baseados em

tiles para poder compô-los formando mapas• projeção isométrica 1:2 (razão altura:comprimento).

Page 50: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

50

Construindo os Tiles

Page 51: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

51

Construindo os Tiles (cont.)

Page 52: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

52

Construtindo um Mapa de Tiles (cont.)

Page 53: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

53

Construindo um mapa de TilesNecessidade de transparência

Page 54: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

54

Tiles Isométricos – Blitting Order

1. Tiles “da frente” devem ser plotados depois2. Se uma pequena porção da tela tiver que

ser atualizada, nós devemos plotar os tiles que mudaram e todos os respectivos vizinhos - obedecendo a regra 1.

Page 55: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

55

Desenhando um Sprite em um Tile Isométrico

O Sprite pode ser desenhado na região em vermelho

Page 56: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

56

Tilemaps Isométricos X Retangulares Mapas retangulares e isométricos geralmente

possuem uma estrutura bidimensional associada que guarda informações de cada tile – Tilemap.

Nos mapas retangulares, incrementar x no tilemap significa se mover para o leste na tela, e aumentar y significa se mover para o sul

E nos mapas isométricos ????

Page 57: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

57

Problemas dos Mapas IsométricosTile Plotting

• Dado uma posição no Tilemap [x][y], como encontrar a coordenada no mundo (em que ponto da tela fica) ?

Mouse mapping• Dado um ponto na tela (ou no mundo), qual a

posição no Tilemap?Tile Walking

• Como mover um objeto de um ponto do mundo para o outro?

Page 58: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

58

Tipos de Mapas Isométricos

Slide Staggered

Diamond

Page 59: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

59

Slide MapsFácil de

• Plotar• Navegar• Interagir

Ocupa muito espaço em telaUsado em scrolled action games

• Zaxxon (1982)

Page 60: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

60

Slide Maps – Sistema de Coordenadas

X

0 1 2 3

Y

01234

X

Y

(0,0) (1,0) (2,0) (3,0)(0,1) (1,1) (2,1)

(0,2)(3,1)

(1,2) (2,2) (3,2)(0,3) (1,3) (2,3) (3,3)

(0,4) (1,4) (2,4) (3,4)

Page 61: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

61

Slide Maps - Tile PlottingDada uma posição no tilemap, qual o pixel

equivalente?

Valor do Pixel Aumento de 1 em MapX

Aumento de 1 em MapY

Equação

PixelX +TileWidth +Tilewidth/2 MapX*TileWidth+ MapY*TileWidth/2

PixelY 0 +TileHeight/2 MapY*TileHeight/2

(0,0)

(0,1)

(1,0)

(1,1)

Page 62: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

62

Slide Maps - Tile PlottingPOINT SlideMap_TilePlotter(

POINT ptMap, int iTileWidth, int iTileHeight) {POINT ptReturn;ptReturn.x = ptMap.x*iTileWidth +

ptMap.y*iTileWidth/2;ptReturn.y = ptMap.y+iTileHeight/2;return (ptReturn);

}

Page 63: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

63

Slide Maps – Tile WalkingComo mover de um objeto de um ponto do

mundo para o outro?

Direções Possíveis:N

NE

L

SE

S

SO

O

NO

Page 64: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

64

Slide Maps – Tile Walking

Direção Variação no X (Tilemap)

Variação no y (Tilemap)

Leste +1 0

Sudeste 0 +1

Oeste -1 0

Noroeste 0 -1

X

Y

(0,0) (1,0) (2,0) (3,0)(0,1) (1,1) (2,1)

(0,2)(3,1)

(1,2) (2,2) (3,2)(0,3) (1,3) (2,3) (3,3)

(0,4) (1,4) (2,4) (3,4)

Page 65: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

65

Slide Maps – Tile WalkingNorte e Sul

X = 1(leste) + 0(noroeste) + 0(noroeste)

y = 0(leste) - 1(noroeste) - 1(noroeste)

X = -1(oeste) + 0(sudeste) + 0(sudeste)

y = 0(oeste) - 1(sudeste) - 1(sudeste)

Page 66: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

66

Slide Maps – Tile WalkingNordeste/Sudoeste

X = 1(leste) + 0(noroeste)

y = 0(leste) - 1(noroeste)

X = -1(oeste) + 0(sudeste)

y = 0(oeste) - 1(sudeste)

Page 67: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

67

Slide Maps – Tile Walking

Direção Variação no X (Tilemap)

Variação no y (Tilemap)

Leste +1 0Sudeste 0 +1Oeste -1 0

Noroeste 0 -1Norte +1 -2Sul -1 +2

Nordeste +1 -1Sudoeste -1 +1

Page 68: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

68

Slide Maps – CódigoPOINT SlideMap_Tilewalker(POINT ptStart,

IsoDirection dir) {switch (dir){

case ISO_NORTH:ptStart.x++; ptStart.y-=2;

case ISO_NORTHEAST:ptStart.x++; ptStart.y--;

case ISO_EAST:ptStart.x++;

case ISO_SOUTHEAST:ptStart.y++;

case ISO_SOUTH:ptStart.x--; ptStart.y+=2;

case ISO_SOUTHWEST:ptStart.x--; ptStart.y++;

case ISO_WEST:ptStart.x--;

case ISO_NORTWEST:ptStart.y--;

} return(ptStart);}

Page 69: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

69

Slide Maps – Mouse mapping

Dado um ponto na tela (ou no mundo), qual a posição no Tilemap?

Como fazer esta conversão de forma rápida e eficiente ??

Subdividindo o mundo em Retângulos !

Page 70: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

70

Slide Maps – Mousemapping

Sabendo em que ponto do retângulo o mouse foi clicado, basta obter a cor do pixel do ponto equivalente no template acima para obter o tile.

Page 71: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

71

Slide Maps – Mousemapping

Ou fazendo uma lookup table:0000002222111111000022222222111100222222222222002222222222222222332222222222224433332222222244443333332222444444

Page 72: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

72

Staggered MapsMuito usado em jogos de estratégia

• Civilization II e III• Alpha Centauri• Pharao

Page 73: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

73

Staggered Maps – Sistema de Coordenadas

(0,0)(0,1)

(0,2)(0,3)

(1,0)

(1,2)(1,1)

(1,3)

(2,0)

(2,2)

(2,1)

(2,3)(3,2)

(3,3)

(3,0)(3,1)

0123

Y

0 1 2 3

X

X

Y

Page 74: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

74

Staggered Maps – Tileplotting

(0,0)(0,1)

(0,2)(0,3)

(1,0)

(1,2)(1,1)

(1,3)

(2,0)

(2,2)

(2,1)

(2,3)(3,2)

(3,3)

(3,0)(3,1)

Valor do Pixel Aumento de 1 em MapX

Aumento de 1 em MapY Equação

PixelX +TileWidth Se MapY é par, TileWidth/2

Se ímpar, - TileWidth/2

MapX*TileWidth+

(MapY&1)*TileWidth/2

PixelY 0 +TileHeight/2 MapY*TileHeight/2

Page 75: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

75

Staggered Maps – TileplottingPOINT StaggedMap_TilePlotter(

POINT ptMap, int iTileWidth, int iTileHeight) {POINT ptReturn;ptReturn.x = ptMap.x*iTileWidth +

(ptMap.y&1)*iTileWidth/2;ptReturn.y = ptMap.y+iTileHeight/2;return (ptReturn);

}

Page 76: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

76

Staggered Maps – Tilewalking

Direção Y Par/Ímpar Mudança em X

Mudança em Y

Leste - 1 0

Oeste - -1 0

Sudeste Par 0 1

Sudoeste Ímpar 0 1

(0,0)(0,1)

(0,2)(0,3)

(1,0)

(1,2)(1,1)

(1,3)

(2,0)

(2,2)

(2,1)

(2,3)(3,2)

(3,3)

(3,0)(3,1)X

Y

Page 77: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

77

Staggered Maps – TilewalkingY ímpar - Noroeste

Se de um Y par para irmos para sudeste basta incrementar x de 0 e y de 1 (o que nos deixa em Y ímpar), então de Y ímpar para irmos para noroeste basta mover x de 0 y de -1

(1,1)(1,2)

(0,3) (1,3)(2,2)

(2,3)

(1,4) (2,4)(1,5)

Y par - Sudeste

Y ímpar - Noroeste

Page 78: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

78

Staggered Maps – TilewalkingY par - Nordeste

Se de um Y ímpar para irmos para sudoeste basta incrementar x de 0 e y de 1 (o que nos deixa em Y par), então de Y par para irmos para nordeste basta mover x de 0 y de -1

(1,1)(1,2)

(0,3) (1,3)(2,2)

(2,3)

(1,4) (2,4)(1,5)

Y ímpar - Sudoeste

Y par - Nodeste

Page 79: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

79

Staggered Maps – Tilewalking

Direção +/-x (y par) +/-y (y par)

+/-x (y ímpar)

+/-y (y ímpar)

Norte ??? ??? ??? ???Nordeste 0 -1 ??? ???

Leste 1 0 1 0Sudeste 0 1 ??? ???

Sul ??? ??? ??? ???Sudoeste ??? ??? 0 1

Oeste -1 0 -1 0Noroeste ??? ??? 0 -1

Page 80: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

80

Staggered Maps – TilewalkingY Par – Noroeste/Sudoeste

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

X = 0(nordeste) –1(oeste)

Y = -1(nordeste) +0(oeste)

X = 0(sudeste) –1(oeste)

Y = +1(sudeste) +0(oeste)

Page 81: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

81

Staggered Maps – TilewalkingY Par – Norte/Sul

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

X = 0(nordeste) –0(noroeste-ímpar)

Y = -1(nordeste) -1(noroeste-ímpar)

X = 0(sudeste) –1(sudoeste-ímpar)

Y = +1(sudeste) +1(sudoeste-ímpar)

Page 82: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

82

Staggered Maps – TilewalkingY Ímpar – Nordeste/Sudeste

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

X = 0(noroeste) +1(leste)

Y = -1(noroeste) +0(leste)

X = 0(sudoeste) +1(leste)

Y = +1(sudoeste) +0(leste)

Page 83: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

83

Staggered Maps – TilewalkingY Ímpar – Norte/Sul

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

(1,1)

(1,2)

(0,3) (1,3)

(2,2)

(2,3)

(1,4) (2,4)

(1,5)

X = +1(nordeste) –1(noroeste-par)

Y = -1(nordeste) -1(noroeste-par)

X = +1(sudeste) –1(sudoeste-par)

Y = +1(sudeste) +1(sudoeste-par)

Page 84: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

84

Staggered Maps – Tilewalking

Direção +/-x (y par) +/-y (y par)

+/-x (y ímpar)

+/-y (y ímpar)

Norte 0 -2 0 -2Nordeste 0 -1 1 -1

Leste 1 0 1 0Sudeste 0 1 1 1

Sul 0 2 0 2Sudoeste -1 1 0 1

Oeste -1 0 -1 0Noroeste -1 -1 0 -1

Page 85: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

85

Staggered Maps – Tilewalking CódigoPOINT StaggeredMap_Tilewalker(POINT ptStart,

IsoDirection dir) {switch (dir){

case ISO_NORTH:ptStart.y-=2;

case ISO_NORTHEAST:ptStart.y--; ptStart.x +=(ptStart.y&1);

case ISO_EAST:ptStart.x++;

case ISO_SOUTHEAST:ptStart.y++; ptStart.x +=(ptStart.y&1);

case ISO_SOUTH: ptStart.y+=2;case ISO_SOUTHWEST:

ptStart.y++; ptStart.x+=(ptStart.y&1-1);case ISO_WEST:

ptStart.x--;case ISO_NORTWEST:

ptStart.y--; ptStart.x+=(ptStart.y&1-1);} return(ptStart);

}

Page 86: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

86

Staggered MapsMapa sem “Dentes”/ Mapas Cilíndricos

Page 87: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

87

Diamond MapsMuito usado em jogos de estratégia em

tempo real:• Age of Empire• Sim City 2000/3000• Roller Coaster Tycoon

Page 88: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

88

Diamond Maps – Sistema de Coordenadas

xy

012

345

67

01

23

45

67

Y X

Page 89: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

89

Diamond Maps - Tileplotting

(0,0)(0,1)

(0,2) (1,1)(1,0)

(2,0)

(1,2) (2,1)(2,2)

Valor do Pixel Aumento de 1 em MapX

Aumento de 1 em MapY

Equação

PixelX TileWidth/2 -TileWidth/2 (MapX-MapY)*TileWidth/2

PixelY TileHeight/2 +TileHeight/2 (MapX+MapY)*TileHeight/2

Page 90: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

90

Diamond Maps - Tileplotting

POINT DiamondMap_TilePlotter(POINT ptMap, int iTileWidth, int iTileHeight) {

POINT ptReturn;ptReturn.x=(ptMapX+ptMapY)*iTileWidth/2ptReturn.y =(ptMapX+ptMapY)* iTileHeight/2;return (ptReturn);

}

Page 91: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

91

Diamond Maps - Tilewalking

xy

(0,0)(0,1)

(0,2) (1,1)(1,0)

(2,0)

(1,2) (2,1)(2,2)

Direção +/- X +- YSudeste 1 0Sudoeste 0 1Noroeste -1 0Nordeste 0 -1

Page 92: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

92

Diamond Maps – TilewalkingNorte/Sul

(0,0)(0,1)

(0,2) (1,1)(1,0)

(2,0)

(1,2) (2,1)(2,2)

(0,0)(0,1)

(0,2) (1,1)(1,0)

(2,0)

(1,2) (2,1)(2,2)

X = 0(nordeste) –1(noroeste)

Y = -1(nordeste) +0(noroeste)

X = 1(sudeste) +0 (sudoeste)

Y = 0(sudeste) +1(sudoeste)

Page 93: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

93

Diamond Maps-TilewalkingLeste/Oeste

(0,0)(0,1)

(0,2) (1,1)(1,0)

(2,0)

(1,2) (2,1)(2,2)

(0,0)(0,1)

(0,2) (1,1)(1,0)

(2,0)

(1,2) (2,1)(2,2)

X = 1(sudeste) +0(nordeste)

Y = 0(sudeste) -1(nordeste)

X = 0(sudoeste) +1 (noroeste)

Y = -1(sudoeste) +0(noroeste)

Page 94: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

94

Diamond Maps – Tilewalking

Direção +/- X +- YNorte -1 -1

Nordeste 0 -1Leste 1 -1

Sudeste 1 0Sul 1 1

Sudoeste 0 1Oeste -1 1

Noroeste -1 0

Page 95: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

95

Diamond Maps – TilewalkingPOINT StaggeredMap_Tilewalker(POINT ptStart,

IsoDirection dir) {switch (dir){

case ISO_NORTH:ptStart.x--;ptStart.y--;

case ISO_NORTHEAST:ptStart.y--;

case ISO_EAST:ptStart.x++; ptStart.y--;

case ISO_SOUTHEAST:ptStart.x++;

case ISO_SOUTH: ptStart.x++;ptStart.y++case ISO_SOUTHWEST:

ptStart.y++; case ISO_WEST:

ptStart.x--; ptStart.y++;case ISO_NORTWEST:

ptStart.x--; } return(ptStart);

}

Page 96: 1 Técnicas Gráficas para Jogos Eduardo Sampaio Rocha Pedro Henrique Macedo Börje Karlsson Geber Ramalho Vicente Vieira Filho

96

Referências http://www.gamedev.net/reference/list.asp?categoryid=44

• Introduction To Isometric Engines;Smooth Scrolling a Tile Map; andScreen to Map Coordinates by Adams, J.

• Axonometric Projections - A Technical Overviewby Riemersma, T.

• Isometric 'n' Hexagonal Maps Part I and Part IIby Tanstaafl

• Map file formatby Gambone, D.

• Tile Graphics Techniques 1.0by McIntosh, J

• Tile Based Games FAQby Palmer, C. and Taylor, G.

• Tile/Map-Based Game Techniques: Base Data Structures; and Tile/Map-Based Game Techniques: Handling Terrain Transitions Michael, D.

• Tiling in DirectX: Part 1 and Part 2Estevão, D.