PDA

View Full Version : Algoritmi per triangolazione


roentgen
20-12-2002, 10:19
Non so se è il posto giusto, ero indeciso se postare su programmazione ma penso che qui possiate darmi risposte più mirate: sto scrivendo un programma che dovrebbe renderizzare delle mesh in 3D, il programma è scritto in Delphi e utilizzo come motore 3D GLScene, per utilizzare l'API OpenGL. Il motore è molto buono ma a me servirebbe poter creare delle mesh irregolari a partire da poligoni irregolari con una funzione extrusion, in pratica ho i miei poligoni ordinati secondo la coordinata y l'uno sull'altro e devo ricreare questo solido particolare, il tutto serve a generare l'aspetto 3D di strutture interne al corpo umano delineate su immagini TAC o anatomiche in 2 dimensioni. Qualcuno sa dirmi dove potrei cercare quello che mi serve?

Grazie a tutti
;)

PCOCCO
20-12-2002, 11:19
:eek: minchia che domandone :eek:
forse dovresti chiedere nella sezione sulla programmazione...

... anzi già che ci sono mi potresti dare una mano su questo:
http://forum.hwupgrade.it/viewtopic.php?t=364533

dies_irae
20-12-2002, 15:01
non ho capito molto bene la domanda:

cosa devi fare?
- estrudere dei poligoni mentre li renderizzi
- hai dei poligoni a tanti punti e devi triangolarli per poterli dar da mangiare al motore grafico
- altro e dies non ha proprio capito una sega

altra cosa: i poligoni ordinati per y, cosa vuol dire? la y va "in su" o "dentro lo schermo" ?

se quello che devi fare e' estrudere lungo l'asse y i tuoi poligoni:
(assumendo che i poligoni non siano altro che una lista di pointer ai vertici che toccano)
-fai una copia di tutti i punti e abbassali di un po' sull'asse y.
-ricrea i poligoni della faccia sotto usando lo stesso ordine dei poligoni della faccia sopra (se i poligoni sono una lista di indici dei punti dovrebbe essere abbastanza facile)

-la parte noiosa sara' fare i poligoni sui bordi. Quello che puoi sapere e' che:
tutti i poligoni che devi creare sono dei 4-points. per ogni copia A-B di punti vicini sul poligono originale esiste una copia (A+x)-(B+x) che appartiene al poligono "in basso", e ti bastera' creare un poligono A-B-(B+x)-(A+x).

purtroppo pero' non avendo altre informazioni non posso aiutarti molto di piu' :(

roentgen
22-12-2002, 18:35
Originally posted by "dies_irae"


- hai dei poligoni a tanti punti e devi triangolarli per poterli dar da mangiare al motore grafico


Ecco proprio così. Ogni poligono è una serie (array) di punti di coordinate x e y che in OpenGL diventano coordinate x e z (perchè la y in OpenGL è il mio asse longitudinale che ti dicevo). La y la ricavo in altra maniera ma la conosco senza problemi ed è fissa per ciascun punto di ogni poligono della serie, ossia i miei poligoni sono paralleli al piano passante per i due assi x e z e sono ordinati in altezza lungo il fatidico asse y. Mi serve sapere qual è la regola per traingolarli... tutto qui, o se conosci un algoritmo rapido per comporre una mesh.

Grazie ancora

So che avrei potuto postare anche in programmazione ma il Xposting non è consentito (anche se una volta tanto poteva serivre ;))

dies_irae
22-12-2002, 18:59
OK, quello che hai bisogno e' come trovare un punto su una retta all'altezza Z. poniamo che hai A e B, vuoi trovare D che si trova in mezzo ai due all'altezza Z.
sai che
pendenza = (Zb - Za)/(Xb-Xa)
e soprattutto che
Xd = Xa + (Z - Za)/pendenza.
Zd = Z.

mo' per triangolare i tuoi poligoni...
prendi il punto piu' in alto e guardi le due linee che partono da quello. prendi la piu' "lunga" sull'asse z e la tagli all'altezza dell'altro punto sull'altra retta. cosi' in pratica stai tagliando fuori un triangolo con la base piatta. Quello che ti resta sara' un altro triangolo se hai culo, se no, di nuovo, prendi il punto piu' in alto, e segui le due linee che partono da li' e tagli il segmento piu' lungo alla stessa altezza del segmento piu' corto... ecc ecc...