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.
fonte
Respostas:
Para que a regra "-facing" seja mantida, verifique se todas as faces estão orientadas corretamente. Use a regra da mão direita, por exemplo, que significa que os vértices de uma face devem ser numerados de forma que uma rotação positiva no plano da face corresponda a um apontamento normal fora do poliedro. (Entendeu?) Ou, mais simplesmente, todo rosto deve vir com o normal de apontar para fora.
As faces oscilantes, isto é, não pertencentes a um poliedro fechado, podem ser vistas como tendo uma orientação indeterminada.
Agora, calcular as partes de uma aresta que estão ocultas por um polígono de contorno é o prato principal. Esse problema está muito próximo ao de recortar um segmento de linha por uma janela poligonal em 2D. Primeiro, considere a linha de suporte do segmento de linha e encontre interseções com o polígono. Usando uma regra de paridade, você pode determinar facilmente as partes dentro e fora do polígono.
fonte