27/09/08 8:54
Thejuster
Volevo sapere che tipo di calcolo dovevo applicare per simulare una rotazione 3d.
come detto ho provato tanti sistemi.
con il mat.pi fà un certo numero di giri su se stessa e poi si allontana lol fermandosi in un punto dello schermo.
qualcosa e sbagliato.
come posso creare una rotazione?
27/09/08 11:08
pierotofy
Supponendo che tu stia usando MDX o XNA... nel codice dove disegni l'oggetto (prima di DrawUserPrimitives o Drawsubset):
device.Transform.World = Matrix.RotationYawPitchRoll(yaw,pitch,roll);
Yaw, pitch e roll ovviamente sono i valori float della rotazione espressi in radianti. Per usare i valori in gradi usa pure la classe Geometry.DegreeToRadian.
Ultima modifica effettuata da pierotofy 27/09/08 11:09
27/09/08 12:53
Il Totem
Cosa significa "con math.pi"? Se esegui sempre una rotazione uguale, non otterrai niente. Devi incrementare l'angolo di rotazione ad ogni frame.
Inoltre, non hai specificato se la rotazione deve avvenire intorno all'asse dell'oggetto o intorno all'origine, e su quale asse.
aaa
27/09/08 13:18
Thejuster
No veramente uso DirectX 9
immagino quella classe non esista. oppure e strutturata diversamente
Visto che uso Semplicemente Vb.net moduli fatti da me.
La terra dovrebbe girare su se stessa in orizzontale proprio come la sua rotazione.
Ultima modifica effettuata da Thejuster 27/09/08 13:19
27/09/08 14:17
il pisano
Io uso c# cmq dovrebbe essere =
Se hai modellato il modello della terra a 0.0.0 cioe' acordinate Vector3(0.0.0) per intenderci basta che fai una
Matrix.RotationX(Angle);
oppure
Matrix.RotationY(Angle);
oppure
Matrix.RotationZ(Angle);
E dovrebbe andare
Angle= float che aumenta all'infinito tipo +=0.001f;
Se pero' utlizzi il Matrix.Scaling allora dovrai utilizzare una formula del tipo
Matrix.scaling(float dim)*Matrix.RotationX(Angle);
dim= dimnenzione di scaling
Tutto cio' viene invalidato se non hai modellato la mesh a coordinate 0.0.0.
Se invece vuoi far ruotare la terra nella proiezione 3D ossia simulare l'orbita attorno a qualcosa allora dovrai utilizzare formule composte che tramite la trigonometria (Calcoli Sin,Cos) ti daranno la giusta posizione ora non ricordo la formula precisa una volta l'ho utilizzata dovrebe essere qualcosa del tipo:
world = Matrix.Traslation(posX+Math.Sin(radianti), _
0,posZ+Math.Cos(radianti))*Matrix.RotationX(Angle);
radianti aumenta o diminuisc = terra che si sposta lungo un'orbita
posX,Z = posizione di partenza
pero' e' da provare non me la ricordo bene
Ultima modifica effettuata da Il Totem 28/09/08 12:45
aaa
27/09/08 15:19
Thejuster
Grazie mille porovo e vi faccio sapere.