Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Marching Cubes
1. Marching Cubes
Josué Machado
Erasmo Artur
Computação Gráfica II
2. • Introdução
• Motivação
• Metodologia
– Dados
– Grade de dados
– Classificação dos cubos
– Interpolação
– Definindo triângulos
– Imprimindo
• Conclusão
3. • Desenvolvido por Lorensen e Cline in 1987
• Aproxima uma isosuperfície pela subdivisão de uma
região do espaço numa grade tridimensional de voxels
• O usuário define um limiar que determina a isosuperfície
• Cada vértice dos voxels possui um peso
• Cada vértice é classificado como maior ou menor que o
limiar
• Voxels que possuem vértices classificados como maiores
e menores faz parte da isosuperfície
• Geralmente renderiza uma superfície por vez.
4. • Permitir que um ou mais fenômenos ou
estruturas de interesse em um conjunto de
dados a ser isolado e renderizado
• Rápida renderização, podendo ocorrer em
hardware genéricos
5. • Dados:
– Formatos suportados: “vol” e “raw”
– Geralmente no formato binário
– Valores armazenados como “unsigned char”
– Faixa de valores entre [0, 255]
– Armazenados em ordem x, y, z
– Provenientes de: http://www.gris.uni-
tuebingen.de/edu/areas/scivis/volren/datasets/da
tasets.html e
http://idav.ucdavis.edu/~okreylos/PhDStudies/Spr
ing2000/ECS277/DataSets.html
6. • Grade de dados
– Organiza os dados de forma a gerar voxels virtuais
– Resolução de acordo com o arquivo de dados,
geralmente 256x256x256
– Cada valor representa o vértice de um(alguns)
voxel(s)
– Consome considerável quantidade de memória
7. • Classificação dos voxels
– Baseado na implementação de Paul Bourke
– Verifica quais vértices do voxel é maior ou igual ao limiar
– Utiliza um inteiro “cubeIndex” para armazenar o “estado”
do voxel
– Para cada vértice n que satisfaz realiza a operação:
• cubeIndex |= (1 << n)
0000 0001 1001
8. • Interpolação
– Interpolação linear simples
• p = p1 + (p2 - p1)/(p2.w - p1.w)*(value - p1.w)
9. • Triangulação
– Determinado a partir de tabela pré-definida
– Originalmente 256 casos
– Removendo-se casos de simetria de rotação e
reflexão os casos se resumem a 14
10. • Triangulação
– A operação & (bitwise and) é realizada entre o
valor obtido pela tabela edgeTable (pelo
cubeIndex) e os valores [1, 2, 4, 8,..., 2048]
– Se o resultado for 1 a aresta deve ser interpolada
• Ex: if(edgeTable[cubeIndex] & 32)
intvtx[5] = interpolation(vtx[5], vtx[6], isovalue);
– Por fim é utilizado a tabela triTable para definir os
pontos(interpolados) de cada triângulo
12. • Imprimindo
– O resultado do algoritmo é uma conjunto de
triângulos
– Estes podem ser renderizados por métodos
tradicionais
– Utilizado OpenGL®
– Normais calculadas a partir de produto vetorial