Envie Artigos e Concorra a Prêmios
 
Artigos
Article List
Primitivas Graficas com XNA
Conceitos, abordagem sobre primitivas 3D e criação de um Protótipo
Enviado por Luciano José em 26/1/2008 15:48:15

Introdução

 
Uma primitiva 3D é uma coleção de vértices que formam uma única entidade 3D. Gráficos são criados a partir de pontos, linhas ou triângulos. Esses elementos básicos são referidos como objetos primitivos. A mais simples primitiva é uma coleção de pontos em um sistema de coordenadas 3D, o qual é chamada de “point list”.
 
Figuras complexas são construídas com uma serie de pontos, linhas, ou triângulos. Um modelo 3D estático é basicamente feito de um arquivo contendo informações de vértices que incluem posição X, Y, Z, cor, coordenadas da imagem, e possivelmente outros dados.
 
Os vértices podem ser renderizados pela produção de pontos para cada vértice, com uma grade de linhas que conectam os vértices entre si, ou com um objeto sólido que é construído com uma serie de triangulo - os quais são ligados pelos vértices.
 
Renderização -  é o processo total de criacao de uma imagem 3D com a caracteristica escolhida, por exemplo: fog, alpha blending, textures, lighting etc.
 

Objetos primitivos

 
Figuras complexas são criadas com objetos primitivos que regulam como os vértices são desenhados. Informações dos vértices poderiam ser renderizadas como pontos, grades de linhas, ou triângulos sólidos.
As vezes, primitivas são polígonos. Um polígono é uma figura 3D fechada delineada por pelo menos 3 vertices. O polígono mais simples é um triangulo. O Directx usa triângulos para compor a maior parte de seus polígonos pelo fato de todos os 3 vertices em um triangulo são garantidos ser coplanares.
 
Conceito de Região Poligonal
 
Uma região poligonal é a reunião de um número finito de regiões triangulares não-sobrepostas e coplanares (estão no mesmo plano).
 
Conceito de Coplanar
 
Em geometria, um conjunto de pontos no espaço é coplanar se todos os pontos estão no mesmo plano geométrico. Por exemplo, 3 pontos são sempre coplanares, porem 4 pontos no espaço nem sempre são coplanares.
  
 

Tipos de Vértices

 
Um objeto Vértice armazena informações do vértice, tais como: posições x, y e z, coordenadas da imagem, um vetor normal, e cor. O XNA FrameWork provê 4 formatos de vértices predefinidos.
 
 
 
 
Renderização de vertices nao-coplanares é ineficiente. Você pode combinar triângulos para formar tanto triângulos quanto malhas largas, complexas,etc.
A ilustracao a seguir mostra um cubo. 2 triangulos de cada face do cubo. O conjunto inteiro de triângulos formam uma primitiva cúbica. Você pode aplicar texturas e matérias para a superfície das primitivas para faze-las parecer ser uma única forma sólida.
 
 
 
 
Você pode também usar triângulos para criar primitivas cuja superfícies aparentam ser curvas lisas. A ilustração a seguir mostra como uma esfera pode ser simulada com triângulos. Depois que um “material” é aplicado, a esfera aparenta estar curvada quando isso é renderizado.
 
 
 
 

Tipos de primitivas:

  • Point Lists
  • Line Lists
  • Line Strips
  • Triangle Lists
  • Triangle Strips
  • Triangle Fans
 

Lista de Pontos

Uma lista de pontos é uma coleção de vertices que são renderizadas como pontos isolados. Sua aplicação pode usa-los em cenas 3D para campos estrelares, ou linhas pontilhadas em uma superfície de um polígono.

A ilustração a seguir representa uma lista de pontos renderizadas.

 

 

Sua aplicação pode aplicar uma lista de pontos à texturas e materiais. As cores em materiais ou texturas aparecem apenas nos pontos desenhados, e não em qualquer local entre os pontos.
 

Lista de Linhas

 
Uma lista de linhas é uma lista de segmentos de reta isoladas. Lista de linhas são úteis para tarefas tanto como adicionar chuva com neve ou chuva pesada para um cenário 3D. Aplicações criam uma lista de linham por preencher um array de vértices.
Note que o numero de vértices em uma lista de linhas precisa ser sempre um numero maior ou igual a 2.
 
A ilustração a seguir mostra uma lista de linhas renderizadas.
 
Você pode aplicar lista de linhas à texturas e materiais. As cores no material ou textura aparecem apenas ao longo das linhas desenhadas, não em qualquer ponto entre as linhas.
 
 
 
 

Malha de Linhas

 
Uma malha de linhas é uma primitiva que é composta de segmentos de linhas conectadas. Sua aplicação pode usar malhas de linhas para criar polígonos que não são fechados. Um polígono fechado é um polígono em que o ultimo vértice é conectado ao seu primeiro vértice por um segmento de linha. Se sua aplicação faz polígonos baseados em malhas de linhas, não há como assegurar que os vértices sejam coplanares.
 

A ilustracao a seguir representa uma malha de linhas renderizadas: 

 

 

 

Lista de Triângulos

 
Uma lista de triangulos é uma lista de triângulos isolados. Eles podem ou nao estar próximos um do outro. Uma lista de triângulos precisa ter pelo menos 3 vertices e o numero total de vértices precisa ser divisível por 3.
Use listas de triângulos para criar um objeto que é composta de partes separadas. Por exemplo, uma forma de criar uma parade de campo de força em um jogo 3D é especificar uma grande lista de pequenos triângulos desconectados.
Daí aplique uma textura e material que aparente emitir luz para a lista de triângulos. Cada triangulo na parede aparenta encandecer. A cena por trás da parede transforma-se parcialmente visível através de fendas entre os triângulos, assim um jogador pode supor que está olhando para um campo de força.
 

A ilustracao a seguir representa uma lista de triangulos renderizados:

 

 

Malha de Triângulos

Uma malha de triangulos é uma série de triângulos conectados. Pelo fato dos triângulos estarem conectados, a aplicação não precisa especificar repetidamente 3 vertices para cada triangulo. Por exemplo, você precisa apenas de 7 vertices para definir a malha de triângulos a seguir:

 

 

O sistema usa vértice v1, v2 e v3 para desenhar o triangulo; v2, v4 e v3 para desenhar o segundo triangulo; v3, v4 e v5 para desenhar o terceiro; v4, v6 e v5 para desenhar o quarto; e assim sucessivamente.

Note que os vértices do segundo e quarto triângulos estão fora de ordem, isto é requerido para assegurar que todos os triângulos sejam desenhados em uma orientação de sentido horário.

 
A maioria dos objetos em um cenário 3D são compostos de malhas de triângulos. Isto acontece porque malhas de triângulos pode ser usadas para especificar objetos complexos em uma forma que faz uso eficiente de memória e tempo de processamento.
 

A ilustração a seguir representa uma malha de triângulos renderizadas. 

 

Leque de Triangulos

 

Um leque de triangulos(triangle Fans) é similar a uma malha de triângulos, exceto que todos os triângulos compartilham um vértice. Isso é mostrado na ilustração a seguir:

 
O sistema usa os vertices v2, v3 e v1 para desenhar o primeiro triangulo; v3, v4 e v1 para desenhar o segundo triangulo; v4, v5 e v1 para desenhar o terceiro triangulo; e assim sucessivamente. Quando Flat Shading é abilitada, o sistema sombreia o triangulo com a cor a partir de seu primeiro vértice.
 
A ilustração a seguir representa um leque de triângulos renderizados:

 

Ordem de Definição das primitivas 

No XNA a ordem padrão para criação de primitivas é a horária(CullClockwiseFace). Essa orientação é a padrao do XNA.

 

As bolinhas de preto são vertices
 
Isso também pode ser alterado e a criacao pode ser efeita, agora, seguindo a orientacao anti-horaria(CullCounterClockwiseFace