Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    142

    [VS2010 XNA] rotazione modello 3d su se stesso

    Ciao a tutti!

    volevo chiedere l aiuto per un problema che ho riscontrato con la rotazione di un modello 3d in xna.

    il problema consiste che dopo aver caricato un modello lo devo traslare per simulare il movimento e poi successivamente devo farlo ruotare su se stesso...per la traslazione tt ok mentre quando lo faccio girare nn ruota su se stesso am su un punto che nn capisco come calcola effettuando una rotazione molto piu ampia di quello che voglio....


    qualcuno puo aiutarmi?


    grazie mille in anticipo!!!

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ciao, ricorda che si ruota sempre intorno ad un vettore, questo vettore è il punto di guinzione degli assi XYZ (diciamo il centro della scena) quindi, quando usi le matrici, devi ricordarti, che se desideri effettuare una rotazione "sul posto" tramite matrici restituite da RotateY o RotateX o RotateZ, devi fare in modo che il punto centrale dell'oggetto corrisponda al centro della scena, ruotarlo e poi traslarlo nella posizione desiderata.
    se trasli la mesh e poi la ruoti, ottieni una rotazione più ampia, il raggio della rotazione sarà direttamente proporzionale alla distanza che la mesh ha dal centro della scena, di conseguenza, per poter ruotare su se stessa, una mesh deve essere nel punto 0, effettuare la rotazione (quindi con un raggio di 0) e poi essere traslata nel punto che si vuole. Tradotto significa che dovrai moltiplicare la matrice di rotazione per la matrice di traslazione e non viceversa. Ricorda inoltre che l'angolo dovrebbe essere espresso in radianti e non in gradi.

    per ottenere una matrice di rotazione di 90° e traslato di 20,0,0

    codice:
    Matrix.Multiply(Matrix.RotationY (90 * Math.PI / 180), Matrix.Translation(20, 0, 0))

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    142
    ummmm grazie credo di aver capito

    il problema penso che sia dovuto anke al fatto che prima traslo il modello(per posizionarlo nella scena ) e poi successivamente lo traslo ancora e lo faccio girare....quindi la prima traslazione mi "sfalsa" un pò la rotazione

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao,
    quando viene creata la scena, questa dura il tempo di un fotogramma, dopo lascia il posto alla successiva che viene ricreata, detto questo, ne conviene che in realtà ogni volta vengono riposizionate tutte le mesh secondo quello che viene impostato nella matrice di ogni oggetto, partendo ovviamente dal centro della scena, quindi, in realtà tu ogni volta parti dal centro non dal punto in cui hai posizionato il modello, solo che probabilmente tieni nella matrice la posizione precedente.

    prova a fare questo

    codice:
    //posizione di partenza (memorizzala fuori da draw)
    Vector3 posizione = new Vector3(20,0,0);
    //dentro il draw
    posizione = new Vector3(posizione +10,0,0);//ti sposti di 10 dalla posizione di partenza
    
    effect.Word = Matrix.Multiply(Matrix.RotationY (90 * Math.PI / 180), Matrix.Translation(posizione));
    come noterai, ogni volta parto da 0, o meglio, tengo in memoria la posizione precedente con un vettore, e poi a questo aggiungo il cambiamento, dopo uso il nuovo vettore per impostare la nuova posizione, ma ovviamente prima lo ruoto. Tieni presente che questo verrà fatto tot volte al secondo, quindi regolati, probabilmente se lo fai girare così vedrai la mesh che schizza via!!!
    Ovviamente in questo caso ti parlo di una singola mesh interna al modello.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    142
    grazie sei molto gentile!!!!!!!

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    figurati

    ma hai risolto?

    EDIT:
    ovviamente nel codice che ho postato prima ci sono sicuramente errori...
    ma credo che abbia capito cosa intendo
    e poi dovrebbe bastare un "posizione.X += 10;" al posto di creare un nuovo vettore.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    142
    ciao !scusa ma in questi gg sono fuori casa e nn posso programmare

    cmq appena provo ti faccio sapere!

    grazie ancora lo stesso!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.