Feb 27 2007

MD3DM: Como desenhar um quadrado usando a classe Mesh

Autor: Marcos Dell Antonio - Categorias: .NET, Direct3D, Mobilidade

Em todos os posts apresentados até agora (1, 2, 3) utilizei um array de vértices para desenhar algo na tela.

Neste post vou mostrar como desenhar um objeto pré-definido pelo Managed Direct3D Mobile: a caixa (ou quadrado, como diz o título do tópico. Em inglês é Box, mas interprete da forma que desejar).

Para este exemplo não será necessário nenhum tipo de buffer de vértices, somente um objeto Mesh.

A única alteração que deve ser feita tomando como base os exemplos anteriores, é no método Render():

 1 private void Render()
 2 {
 3     _device.Clear(ClearFlags.Target,
 4                   Color.Bisque,
 5                   1.0f,
 6                   0);
 7 
 8     _device.BeginScene();
 9 
10     _mesh = Mesh.Box(_device, 0.5f, 0.5f, 0);
11 
12     _device.Transform.World =
13         Matrix.Translation(0, 0, 0);
14     _mesh.DrawSubset(0);
15 
16     _device.Transform.World =
17         Matrix.Translation(-0.75f, 0, 0);
18     _mesh.DrawSubset(0);
19 
20     _device.Transform.World =
21         Matrix.Translation(0.75f, 0, 0);
22     _mesh.DrawSubset(0);
23 
24     _device.Transform.World =
25         Matrix.Translation(0, 0.75f, 0);
26     _mesh.DrawSubset(0);
27 
28     _device.Transform.World =
29         Matrix.Translation(0, -0.75f, 0);
30     _mesh.DrawSubset(0);
31 
32     _device.Transform.World =
33         Matrix.Translation(-0.75f, 0.75f, 0);
34     _mesh.DrawSubset(0);
35 
36     _device.Transform.World =
37         Matrix.Translation(-0.75f, -0.75f, 0);
38     _mesh.DrawSubset(0);
39 
40     _device.Transform.World =
41         Matrix.Translation(0.75f, 0.75f, 0);
42     _mesh.DrawSubset(0);
43 
44     _device.Transform.World =
45         Matrix.Translation(0.75f, -0.75f, 0);
46 
47     _mesh.DrawSubset(0);
48 
49     _device.EndScene();
50     _device.Present();
51 }

Mas o que isso tudo faz? Pois bem, vamos por partes. Além de limpar o device e iniciar o desenho da cena, é criado um Mesh (modelo). Este mesh representa o quadrado que será desenhado na tela.

Já que eu quero desenhar nove quadrados, foi preciso fazer uma translação sobre o eixo X, desenhar o primeiro quadrado, transladar novamente, desenhar o próximo quadrado e assim sucessivamente. Repare que em determinadas situações foi preciso transladar o eixo Y também, pois são três quadrados por linha.

O resultado final é este:

É isso ae. Nada muito difícil ou demorado. Daqui pra frente o bicho pega, pois vou começar a estudar Index Buffer e a especificação dos arquivos OBJ.

Até +.

Adicione ao del.icio.us del.icio.us | Adicione ao Rec6 Rec6

Faça um comentário