Por diversión, estoy tratando de hacer un visor de marco de alambre para DCPU-16 . Entiendo cómo hacer todo, excepto cómo ocultar las líneas que están ocultas en el marco de alambre. Todas las preguntas aquí en SO suponen que tiene acceso a OpenGL, desafortunadamente no tengo acceso a nada de eso para el DCPU-16 (o cualquier tipo de aceleración de hardware).
Encontré una descripción bastante buena del algoritmo de Appel en Google Books . Sin embargo, hay un problema que estoy teniendo problemas para resolver.
Appel definió la línea de contorno como un borde compartido por un polígono orientado hacia adelante y hacia atrás, o un borde no compartido de un polígono orientado hacia adelante que no es parte de un poliedro cerrado. Un borde compartido por dos polígonos frontales no causa cambios en la visibilidad y, por lo tanto, no es una línea de contorno. En la figura 8.4, los bordes AB, EF, PC, GK y CH son líneas de contorno, mientras que los bordes ED, DC y GI no lo son.
Entiendo las reglas del algoritmo y cómo funciona una vez que tenga sus líneas de contorno, sin embargo, no entiendo qué es lo que debo hacer para determinar si un borde es " compartido por un polígono orientado hacia adelante y hacia atrás, o borde no compartido de un polígono de frente que no es parte de un poliedro cerrado "desde un punto de vista de codificación. Puedo ver una forma y puedo saber qué líneas son curvas de nivel en mi cabeza, pero no tengo idea de cómo transferir esa "comprensión" a un algoritmo codificado.
Actualizar
He avanzado en la determinación de las líneas de contorno. Encontré estas dos notas de una clase de la Universidad de Buffalo sobre gráficos por computadora.
Considera los bordes. Estos se dividen en tres categorías.
- Un borde que une dos caras invisibles es en sí mismo invisible. Esto se eliminará de la lista y se ignorará.
- Un borde que une dos caras potencialmente visibles se llama 'borde de material' y requerirá un procesamiento adicional.
- Un borde que une una cara potencialmente visible y una cara invisible es un caso especial de un 'borde material' y también se llama 'borde de contorno'.
Utilizando los dos datos anteriores, puedo acercarme a poder escribir esto como código, pero todavía tengo un largo camino por recorrer.