Oppure

Loading
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?
mire.forumfree.it/ - Mire Engine
C# UI Designer
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
Il mio blog: piero.dev
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
mire.forumfree.it/ - Mire Engine
C# UI Designer
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.
mire.forumfree.it/ - Mire Engine
C# UI Designer
29/09/08 12:29
Thejuster
Allora ho provato un po il codice
la rotazione funziona ma schizza come una scheggia

uhm come dichiaro una variabile float? del tipo 0.01f?

ho provato con un valore Integer

dim angolox as integer = 1

dev.Transform.World = Matrix.Translation(TerraPosition)

            angleX += 1

           dev.Transform.World = Matrix.RotationX(angleX)

            Terra.Render()



provando in questo modo ruota ma in manier spoporzionata.

come faccio a muoverla in 0.01f?

l'argomento l'accetta
ma poi nel rendering non si muove di un passo
se facico tipoo

anglex += 0.01f
mire.forumfree.it/ - Mire Engine
C# UI Designer
29/09/08 14:27
Il Totem
Float in C# corrisponde a Single in Vb.Net.
Dim Angle As Single = 0.01

Ricordati che le misurea sono in radianti. 1 equivale circa da pi greco terzi radianti, e quindi 60°. Se compie 60° di rotazione ogni 1/60 secondi direi che va un tantino veloce.
aaa