PDA

View Full Version : Ambiente 2d, simulare il 3d


MEMon
09-05-2006, 18:06
Ciao, senza tirare in ballo nessun linguaggio specifico, come ci si comporta per simulare il 3d avendo solo il 2d? Mi spiego meglio.
Avrei la necessità di creare un cubo che ruota stile 3d, ma senza avere nessuna libreria specifica x il 3d(solo 2d).
Quindi posso ruotare e traslare a piacere le faccie del cubo, ma in che modo per simulare la rotazione 3d? cioè che le facciè che stan dietro scompaione e poi ricompaiono quando si trovano davanti...non so se mi sono spiegato bene.

mynos79
09-05-2006, 18:21
Vai di trigonometria :D

PGI-Bis
09-05-2006, 22:49
mynos79 ha sintetizzato con un certa efficacia :D.

A meno che tu non appartenga alla categoria di chi fa colazione con pane e angoli, puoi prendere un bel librone di "matematica 3d" per computer graphic (ce ne sono a valanghe), butti l'occhio e metti insieme il tutto. Ecco, magari tra buttar l'occhio e mettere insieme passa un po' di sudore ma per fare si fa.

MEMon
09-05-2006, 23:47
Va bene :)

shinya
10-05-2006, 14:08
Ciao, senza tirare in ballo nessun linguaggio specifico, come ci si comporta per simulare il 3d avendo solo il 2d? Mi spiego meglio.
Avrei la necessità di creare un cubo che ruota stile 3d, ma senza avere nessuna libreria specifica x il 3d(solo 2d).
Quindi posso ruotare e traslare a piacere le faccie del cubo, ma in che modo per simulare la rotazione 3d? cioè che le facciè che stan dietro scompaione e poi ricompaiono quando si trovano davanti...non so se mi sono spiegato bene.

Vedo che ti vuoi far del male da solo...bene!
Su quel bel libro che è Developing Games in Java c'è un prontuario che ti spiega precisamente ciò che stai cercando di fare, e la matematica che ci sta dietro (anche se a dir la verità, la parte matematica è piuttosto tralasciata).

MEMon
14-05-2006, 12:53
Riuppo questo post perchè ora mi serve veramente sapere come fare.
Ho cercato un po' in giro, ho anche avuto modo di vedere il libro "Developing Games" ma la parte dove spiega come trasformare le coordinate è davvero striminzita.
Da quel che ho capito la coordinata Z serve per saclare le altre in modo da dare una senzazione di profondità, ma non ho capito bene come...

PGI-Bis
14-05-2006, 13:44
Io ho letto Developing Game in Java e non credo sia il libro giusto. Mi pare risponda alle domande: "sapendo già come si deva fare in generale, come lo farei in Java" e anche "sapendo già come..., come lo farei in un modo un po' più orientato agli oggetti".

"Non sapendo già", ti tocca scendere di un gradino. Io ho letto Dunn Parbeyy, "3D Math Primer for Graphics and Game Development", Wordware. Costa 50 dollarozzi e tutto sommato si lascia leggere (l'argomento non è certo un'educanda a caccia d'avventure :D ).

Per 50$ puoi prendere anche "Mathematics for 3D Game Programming & Computer Graphics", che è francamente digeribile quanto un basello di granito però dice molte cose molto interessanti.

A prescindere dal titolo, credo che un libro di questa specie ti serva se hai intenzioni di avventurarti nel mondo del 3D perchè ammettendo di risolvere la cosa con una domanda sul forum, poi tra tre giorni ne salta fuori un'altra e ti tocca aspettare due settimane per venirne a capo. Avere un riferimento a portata di mano non può che agevolarti.

71104
14-05-2006, 15:47
Vai di trigonometria :D in realtà finché si tratta solo di disegnare solidi 3D, di traslarli e di scalarli la trigonometria non serve; inizia a servire solo con le rotazioni.

piccola spiegazione teorica per disegnare un vertice in prospettiva: tu per prima cosa nel tuo programma memorizzi il vertice come una struct contenente 3 float, le coordinate; poi avrai il tuo array di vertici da disegnare.

poi devi stabilire un riferimento cartesiano; ti conviene mettere l'origine al centro (per semplificare i calcoli) e l'asse delle ordinate (quello verticale) orientato verso il basso (per semplificare la conversione al riferimento finale della finestra, che solitamente ha l'origine in alto a sinistra e l'asse delle ordinate verso il basso).

poi devi anche stabilire un riferimento cartesiano a tre dimensioni, e sempre per semplificare i calcoli è meglio adattarlo a quello 2d: stessa dimensione dell'unità orizzontale, stessa verticale, asse delle ordinate verso il basso, e in più aggiungi l'asse della profondità (coordinata Z) orientato come ti pare. inoltre supponiamo che l'origine corrisponda al PoV (Point-of-View).

le 3 coordinate di ciasun vertice sono riferite a questo riferimento 3d; il tuo scopo è convertirle in coppie di coordinate 2d riferite al riferimento 2d; ed infine devi convertirle al riferimento 2d della finestra, ma grazie allo stesso orientamento dell'asse Y per quest'ultima operazione sarà sufficiente una traslaione d'origine.

detto questo, per effettuare la conversione da 3d a 2d assumendo che il PoV sia collocato all'origine del riferimento 3d, è sufficiente risolvere due proporzioni, una per la X del punto e una per la Y:

X_2D : X_3D = w : Z

X_2D = coordinata X da trovare
X_3D = coordinata X del punto rispetto al riferimento 3d
Z = distanza tra il punto e l'origine (che sarebbe il PoV)
w = valore costante scelto a piacere; valore consigliato = metà della larghezza della finestra

per la Y fai la stessa cosa:

Y_2D : Y_3D = h : Z

qui il valore consigliato di h diventa metà dell'altezza piuttosto che della larghezza.

proverei a spiegartelo meglio se potessi fare un disegno, così ti farei capire come mai consiglio di prendere le dimensioni dimezzate della finestra come valori costanti nella proporzione.

MEMon
14-05-2006, 16:22
Grazie mille, sto guardando forse riesco a fare qualcosa di carino :)