Pag 4 di 4 PrimaPrima ... 234
Risultati da 76 a 97 di 97

Discussione: domanda su XNA (c#)

  1. #76
    Suprema Borga Imperiale
    Data Registrazione
    13-01-04
    Località
    Milano
    Messaggi
    17,967

    Predefinito Riferimento: domanda su XNA (c#)

    a meno che tu non voglia vedere tutto bianco direi che devi studiare almeno come applicare le luci ad una scena 3d.

  2. #77
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Ho applicato delle textures ad un quadrato, una sfera (usando una formula), ecc...

    E' possibile farlo con un modello 3D importato (da blender, per esempio), anche abbastanza complesso (per esempio, un essere umano, ecc...)?
    Conviene, oppure occorrono dei programmi a parte?
    Posso applicare le textures direttamente da blender, per poi importare il tutto in XNA?

  3. #78

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio
    Ho applicato delle textures ad un quadrato, una sfera (usando una formula), ecc...

    E' possibile farlo con un modello 3D importato (da blender, per esempio), anche abbastanza complesso (per esempio, un essere umano, ecc...)?
    Conviene, oppure occorrono dei programmi a parte?
    Posso applicare le textures direttamente da blender, per poi importare il tutto in XNA?
    Certo. Devi esportare posizioni e coordinate di texture da blender in un file .x o .fbx.

    Un grande editor, per te che sei interessato alla programmazione piú che al modeling, se ho capito bene, é google SketchUp. Nella versione pro esporta in fbx...

  4. #79
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Grazie per la risposta (da quanto ho capito, è più comodo fare tutto dai programmi di modelling e non da XNA ).

    Comunque, cambiando discorso, mi è tornato un piccolo dubbio sulle matrici di rotazione. Ho creato un cubo che voglio ruotare attorno all'asse x o attorno all'asse y, in base alla pressione del relativo tasto (che incrementerà progressivamente i radianti di rotazione). Questa riga si trova, ovviamente, nel metodo Update:

    pipeline.World = Matrix.CreateRotationX(rad_x) * Matrix.CreateRotationY(rad_y);

    Ripensandoci, in questo modo il cubo verrà ruotato prima attorno all'asse y e, dopo, attorno all'asse x, provocando dei risultati errati e indesiderati (dopo qualche giro, comincia a ruotare attorno all'asse z !!! ). Infatti, ad esempio, ruotare il cubo 2 volte attorno all'asse y, poi 5 volte attorno all'asse x e infine un'ultima attorno all'asse y porta ad un risultato diverso dal ruotare prima 3 volte (2+1) attorno all'asse y e, dopo, 5 volte attorno all'asse x (come purtroppo accade in questo caso)

    Come posso risolvere questo problema?

  5. #80

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio
    Come posso risolvere questo problema?
    Forse sei incappato nel gimbal lock, e quindi beneficeresti dell'utilizzo dei quaternioni.

  6. #81
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Encelo Visualizza Messaggio
    Forse sei incappato nel gimbal lock, e quindi beneficeresti dell'utilizzo dei quaternioni.
    Perfetto...

    E' vero che questo problema del "gimbal lock" non si verifica se si prende in esame un solo punto (e non un modello costituito da più punti)?

  7. #82

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio
    Grazie per la risposta (da quanto ho capito, è più comodo fare tutto dai programmi di modelling e non da XNA ).

    Comunque, cambiando discorso, mi è tornato un piccolo dubbio sulle matrici di rotazione. Ho creato un cubo che voglio ruotare attorno all'asse x o attorno all'asse y, in base alla pressione del relativo tasto (che incrementerà progressivamente i radianti di rotazione). Questa riga si trova, ovviamente, nel metodo Update:

    pipeline.World = Matrix.CreateRotationX(rad_x) * Matrix.CreateRotationY(rad_y);

    Ripensandoci, in questo modo il cubo verrà ruotato prima attorno all'asse y e, dopo, attorno all'asse x, provocando dei risultati errati e indesiderati (dopo qualche giro, comincia a ruotare attorno all'asse z !!! ). Infatti, ad esempio, ruotare il cubo 2 volte attorno all'asse y, poi 5 volte attorno all'asse x e infine un'ultima attorno all'asse y porta ad un risultato diverso dal ruotare prima 3 volte (2+1) attorno all'asse y e, dopo, 5 volte attorno all'asse x (come purtroppo accade in questo caso)

    Come posso risolvere questo problema?
    Matrix.CreateFromYawPitchRoll?

  8. #83
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da giuseppemag Visualizza Messaggio
    Matrix.CreateFromYawPitchRoll?
    Dà lo stesso problema, non cambia niente.

    E' un problema di sequenza. Ti faccio un esempio: ruotare un cubo 2 volte attorno all'asse y e una attorno all'asse x è diverso dal ruotarlo una volta attorno all'asse y, poi una attorno all'asse x e infine un'altra attorno all'asse y. Il risultato sarebbe diverso (cambiando la sequenza, cambia l'effetto, inoltre non ruota più correttamente).

    Non riesco a capire perchè questo problema non si pone se ruoto un solo punto.

    Mi toccherà studiare i quaternioni e quel gimbal lock. Spero soltanto di trovare qualcosa da internet (in italiano magari)!

    A te non dà problemi la rotazione di un modello 3D usando soltanto CreateFromYawPitchRoll (come ho gia detto, dovrebbe darti delle rotazioni sbagliate, visto che non rispetta l'ordine giusto delle rotazioni)?

    Ecco il metodo Update (che aggiorna la matrice World):

    protectedoverridevoid Update(GameTime gameTime)
    {
    k = Keyboard.GetState();
    if (k.IsKeyDown(Keys.Left))
    y += 0.01f; //radianti rotazione attorno asse y
    if (k.IsKeyDown(Keys.Up))
    x += 0.01f; //radianti rotazione attorno asse x
    pipeline.World = Matrix.CreateFromYawPitchRoll(y,x, 0);
    base.Update(gameTime);
    }
    Ultima modifica di Toty_; 01-01-10 alle 18:59:59

  9. #84
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Sto cercando di capire qualcosa sui quaternioni. Sono molto complicati. Finora ho capito soltanto che (magari ho anche capito male ):

    q = (w, v)

    dove w è l'angolo di rotazione e v è un vettore di lunghezza unitaria (versore) che rappresenta l'asse di rotazione (che può anche non coincidere con uno dei tre assi x, y, z ma passa comunque per l'origine). Riferendosi ad un ambiente 4D, deve essere prima convertito in 3D con apposite formule (usendo cos e sin, le ho viste da un sito).

    Tralasciando tutta questa teoria (che tra l'altro, non capirò mai completamente), non sono ancora arrivato al nocciolo della questione:

    In che modo devo usare i quaternioni per poter raggirare il gimbal lock? Quali passaggi devo fare e, soprattutto, cosa devo inserire nella matrice World di BasicEffect?

    Spero possiate rispondermi, indicandomi tutti i passaggi necessari.

  10. #85
    Suprema Borga Imperiale
    Data Registrazione
    13-01-04
    Località
    Milano
    Messaggi
    17,967

    Predefinito Riferimento: domanda su XNA (c#)

    Si...e magari veniamo anche a casa tua a programmare

    Fai una ricerca su google: ci sono un sacco di classi già implementate sulle quaternioni, molte di queste hanno anche dei metodi per passare dalla rappresentazione a quaternione a quella matriciale.

    Una volta trovati gli esempi te li guardi, ci sbatti un pò la testa se hai necessità di capire e poi li integri nel tuo codice.

  11. #86
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Cherno Visualizza Messaggio
    Si...e magari veniamo anche a casa tua a programmare

    Fai una ricerca su google: ci sono un sacco di classi già implementate sulle quaternioni, molte di queste hanno anche dei metodi per passare dalla rappresentazione a quaternione a quella matriciale.

    Una volta trovati gli esempi te li guardi, ci sbatti un pò la testa se hai necessità di capire e poi li integri nel tuo codice.
    Chi ti ha detto che non ci sto sbattendo la testa? Sto cercando ovunque per capirci qualcosa ma non è così facile come la fai tu!
    Non ti sto chiedendo di farmi tu i programmi, chiedevo soltanto di farmi un piccolissimo esempio giusto per entrare nell'ottica. Gli esempi che sto trovando su internet sono difficili e confusionari, mirati a spiegare altre cose.

  12. #87
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Il problema è che la rotazione non è corretta se moltiplico un nuovo quaternione_rotazione (in base alla pressione di un tasto) con il vecchio (che comprende le rotazioni precedenti). Se invece creo un quaternione YawPitchRoll che ha i radianti derivanti da tutte le rotazioni, non ne parliamo nemmeno...

    Guardando su internet, ho notato che usano i quaternioni nella stessa maniera in cui usano le matrici con gli angoli di Eulero. Ma in questo modo, non si può evitare il gimbal lock.
    Non riesco a capire quale passaggio manca...

    Nel metodo, cerco di ruotare un cubo su se stesso attorno all'asse y o x (in base al tasto premuto). Ruota correttamente al 100%: come se durante la rotazione cominciasse a ruotare un po' anche attorno all'asse z..

    protectedoverridevoid Update(GameTime gameTime)
    {
    k = Keyboard.GetState();
    if (k.IsKeyDown(Keys.Left))
    Q = Quaternion.CreateFromAxisAngle(newVector3(0, 1, 0), 0.01f) * Q;
    if (k.IsKeyDown(Keys.Up))
    Q = Quaternion.CreateFromAxisAngle(newVector3(1, 0, 0), 0.01f) * Q;
    pipeline.World = Matrix.CreateTranslation(-0.5f, -0.5f, -0.5f) * Matrix.CreateFromQuaternion(Q) * Matrix.CreateTranslation(0.5f, 0.5f, 0.5f);
    base.Update(gameTime);
    }

    Non capisco perchè c'è questa anomalia..
    Ultima modifica di Toty_; 09-01-10 alle 20:27:56

  13. #88
    Il Nonno L'avatar di Seraph888
    Data Registrazione
    19-09-05
    Località
    Utòpia
    Messaggi
    6,773

    Predefinito Riferimento: domanda su XNA (c#)

    Mi chiedo già per la seconda volta (post 83 e 87) come mai protected override void nel tuo codice è tutta una parola.

  14. #89
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Seraph888 Visualizza Messaggio
    Mi chiedo già per la seconda volta (post 83 e 87) come mai protected override void nel tuo codice è tutta una parola.
    Non lo so, ho fatto il copia e incolla. Comunque solo nel post è cosi.

  15. #90
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Potete dirmi se, secondo voi, ruota correttamente?

    http://www.mediafire.com/?aijqtnwgydy

  16. #91
    Suprema Borga Imperiale
    Data Registrazione
    13-01-04
    Località
    Milano
    Messaggi
    17,967

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio
    Chi ti ha detto che non ci sto sbattendo la testa? Sto cercando ovunque per capirci qualcosa ma non è così facile come la fai tu!
    Non ti sto chiedendo di farmi tu i programmi, chiedevo soltanto di farmi un piccolissimo esempio giusto per entrare nell'ottica. Gli esempi che sto trovando su internet sono difficili e confusionari, mirati a spiegare altre cose.
    Bè io ti ho indirizzato, a volte capita di sbattere la testa a vuoto

  17. #92
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Cherno Visualizza Messaggio
    Bè io ti ho indirizzato, a volte capita di sbattere la testa a vuoto
    La testa sta sbattendo a vuoto da un bel po' con questi quaternioni. Non vi avevo chiesto di farmi il programma del secolo con 100.000.000 di righe di codice usando i quaternioni. Vi avevo solo chiesto un'insignificante riga di codice all'interno del metodo Update per riuscire a capire in che modo vanno usati i quaternioni (a differenza delle matrici di rotazione). Tra l'altro, il codice l'avevo gia postato io, e visto che avete più esperienza di me, potevate almeno dirmi cosa c'era che non andava.

    Ma se poi vogliamo fare solo polemiche...
    Su internet ho gia guardato e ho notato che li usano nello stesso modo in cui si usano le matrici di rotazione.

  18. #93
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Ho risolto il problema.

    Comunque ho un dubbio sul metodo Vector3.Transform:
    Se ho un punto Vector3 'P' e un quaternione 'Q', il prodotto:

    Vector3.Transform(P,Q);

    moltiplica esattamente --> Q*P*coniugato_di_Q
    oppure fa soltanto --> P*Q ?

  19. #94
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Devo chiedervi una cortesia: potreste indirizzarmi a dei siti abbastanza chiari (anche in inglese) che mostrino degli esempi di codice con l'uso della SLERP?
    Io non ho ancora trovato niente di decente.

    Specificamente, mi servirebbero delle applicazioni di SLERP con telecamera in terza persona (non mi servono delle semplici spiegazioni di questa formula, quelle le ho gia).

  20. #95
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Ho un problemino nella comprensione delle maschere bit a bit. Forse chi ha studiato informatica all'università può aiutarmi un attimo. Riguarda lo stencil buffer (ma tanti altri argomenti, da quanto ho capito). In poche parole c'è un confronto tra un valore settato da me (ReferenceStencil) e quello nello stencil buffer nel pixel corrente. Però ho letto che è possibile "modificare" il confronto mediante un altro valore (StencilMask) con l'operatore bitwise (&). I valori vanno scritti in esadecimale.

    Il problema è che non ne capisco il senso. Applicando l'operatore bitwise a due valori esadecimali cosa cambia nel confronto? Ho letto che serve per escludere alcuni bit nel confronto, ma cosa significa?

  21. #96
    Il Fantasma
    Data Registrazione
    24-04-08
    Messaggi
    81

    Predefinito Riferimento: domanda su XNA (c#)


  22. #97
    Il Puppies
    Data Registrazione
    14-08-09
    Messaggi
    310

    Predefinito Riferimento: domanda su XNA (c#)

    Grazie. Ora li leggo.

Pag 4 di 4 PrimaPrima ... 234

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato