Per divertimento sto cercando di creare un visualizzatore wireframe per DCPU-16 . Capisco come fare tutto tranne come nascondere le linee che sono nascoste nella cornice del filo. Tutte le domande qui su SO presumono che tu abbia accesso a OpenGL, sfortunatamente non ho accesso a nulla di simile per il DCPU-16 (o qualsiasi tipo di accelerazione hardware).
Ho trovato una descrizione abbastanza buona dell'algoritmo di Appel su Google Libri . Tuttavia, c'è un problema che non riesco a capire.
Appel ha definito la linea di contorno come un bordo condiviso da un poligono frontale e posteriore, o un bordo non condiviso di un poligono frontale che non fa parte di un poliedro chiuso. Un bordo condiviso da due poligoni rivolti in avanti non provoca alcun cambiamento di visibilità e quindi non è una linea di contorno. In Fig. 8.4, i bordi AB, EF, PC, GK e CH sono linee di contorno, mentre i bordi ED, DC e GI non lo sono.
Capisco le regole dell'algoritmo e come funziona una volta che hai le tue curve di livello, tuttavia non capisco cosa devo fare per determinare se un bordo è " condiviso da un poligono frontale e posteriore, oppure bordo non condiviso di un poligono frontale che non fa parte di un poliedro chiuso "dal punto di vista della codifica. Riesco a guardare una forma e so quali sono le linee di contorno nella mia testa, ma non ho idea di come trasferire questa "comprensione" in un algoritmo codificato.
Aggiornare
Ho compiuto alcuni progressi nel determinare le curve di livello. Ho trovato questi due appunti di una lezione della University of Buffalo sulla computer grafica.
Considera i bordi. Questi rientrano in tre categorie.
- Un bordo che unisce due facce invisibili è di per sé invisibile. Questo verrà eliminato dall'elenco e ignorato.
- Un bordo che unisce due facce potenzialmente visibili è chiamato "bordo materiale" e richiederà un'ulteriore elaborazione.
- Un bordo che unisce una faccia potenzialmente visibile e una faccia invisibile è un caso speciale di un "bordo materiale" ed è anche chiamato "bordo di contorno".
Utilizzando le due informazioni di cui sopra sono in grado di avvicinarmi alla possibilità di scriverlo come codice, ma ho ancora molta strada da fare.