Por diversão, estou tentando criar um visualizador de estrutura de arame para o DCPU-16 . Eu entendo como fazer tudo, exceto como ocultar as linhas que estão ocultas na estrutura de arame. Todas as perguntas aqui no SO supõem que você tenha acesso ao OpenGL, infelizmente não tenho acesso a nada parecido com o DCPU-16 (ou qualquer tipo de aceleração de hardware).
Encontrei uma descrição bastante boa do algoritmo de Appel no Google Livros . No entanto, há um problema que estou tendo problemas para descobrir.
Appel definiu a linha de contorno como uma aresta compartilhada por um polígono voltado para a frente e voltado para trás ou aresta não compartilhada de um polígono voltado para a frente que não faz parte de um poliedro fechado. Uma aresta compartilhada por dois polígonos voltados para a frente não causa alteração na visibilidade e, portanto, não é uma linha de contorno. Na Fig. 8.4, as arestas AB, EF, PC, GK e CH são linhas de contorno, enquanto as arestas ED, DC e GI não.
Entendo as regras do algoritmo e como ele funciona quando você tem suas linhas de contorno, no entanto, não entendo o que preciso fazer para determinar se uma aresta é " compartilhada por um polígono voltado para a frente e voltado para trás ou borda não compartilhada de um polígono voltado para a frente que não faz parte de um poliedro fechado "do ponto de vista da codificação. Posso observar uma forma e saber quais linhas são linhas de contorno na minha cabeça, mas não tenho idéia de como transferir esse "entendimento" para um algoritmo codificado.
Atualizar
Eu fiz alguns progressos na determinação das linhas de contorno. Encontrei essas duas notas de aula de uma aula da Universidade de Buffalo sobre computação gráfica.
Considere as arestas. Estes caem em três categorias.
- Uma aresta que une duas faces invisíveis é ela própria invisível. Isso será excluído da lista e ignorado.
- Uma aresta que une duas faces potencialmente visíveis é chamada de 'aresta do material' e exigirá processamento adicional.
- Uma aresta que une uma face potencialmente visível a uma face invisível é um caso especial de uma 'aresta material' e também é chamada de 'aresta de contorno'.
Usando as duas informações acima, sou capaz de escrever isso como código, mas ainda tenho um longo caminho a percorrer.