Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Rotazione 3D
Forum - C# / VB.NET - Rotazione 3D

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:54
Sabato, 27/09/2008
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?


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 13:08
Sabato, 27/09/2008
Supponendo che tu stia usando MDX o XNA... nel codice dove disegni l'oggetto (prima di DrawUserPrimitives o Drawsubset):

Codice sorgente - presumibilmente Plain Text

  1. 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 il 27/09/2008 alle 13:09


Il mio blog: https://piero.dev
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 14:53
Sabato, 27/09/2008
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.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:18
Sabato, 27/09/2008
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.


Thejuster ha allegato un file: Immagine.jpg (51924 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Thejuster il 27/09/2008 alle 15:19


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
il pisano (Ex-Member)
Pro


Messaggi: 95
Iscritto: 02/04/2007

Segnala al moderatore
Postato alle 16:17
Sabato, 27/09/2008
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 il 28/09/2008 alle 14:45
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:19
Sabato, 27/09/2008
Grazie mille porovo e vi faccio sapere.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:29
Lunedė, 29/09/2008
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

Codice sorgente - presumibilmente C# / VB.NET

  1. dim angolox as integer = 1
  2.  
  3. dev.Transform.World = Matrix.Translation(TerraPosition)
  4.  
  5.             angleX += 1
  6.  
  7.            dev.Transform.World = Matrix.RotationX(angleX)
  8.  
  9.             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


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:27
Lunedė, 29/09/2008
Float in C# corrisponde a Single in Vb.Net.
Codice sorgente - presumibilmente C# / VB.NET

  1. 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.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:43
Lunedė, 29/09/2008
Grande totem grazie mille
funziona perfettamente :k:

infatti era quello il problema
effettaunta tantissime rotazioni in 1 secondo

sembrava un pupazzo di neve con il sedere in fiamme
:rotfl:



https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo