Pag 3 di 4 PrimaPrima 1234 UltimaUltima
Risultati da 51 a 75 di 97

Discussione: domanda su XNA (c#)

  1. #51

    Predefinito Riferimento: domanda su XNA (c#)

    Ciao, non sono molto esperto di xna (preferisco lavorare con il c++...) però quello che ti serve a te è creare un viewing frustum (composto dall'intersezione di 6 piani) e farlo gestire dalla camera. Googlando mi è uscito questo risultato, spero ti possa essere utile.

    Citazione Originariamente Scritto da Toty_
    Forse non hai letto con attenzione tutta la discussione perchè, a parte questo dubbio su directx o opengl, io sto cercando di capire perchè per ruotare una visuale serve creare tre vettori che rappresentano le righe della matrice di rotazione (e comunque adesso so bene come si dispongono gli elementi all'interno di una matrice per traslare o ruotare).
    Si estraggono i vari valori della matrice a seconda del sistema usato, poichè le directx sfruttano un piano cartesiano orientato a destra mentre le opengl uno orientato a sinistra.

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Gr1ph00n Visualizza Messaggio
    Ciao, non sono molto esperto di xna (preferisco lavorare con il c++...) però quello che ti serve a te è creare un viewing frustum (composto dall'intersezione di 6 piani) e farlo gestire dalla camera. Googlando mi è uscito questo risultato, spero ti possa essere utile.



    Si estraggono i vari valori della matrice a seconda del sistema usato, poichè le directx sfruttano un piano cartesiano orientato a destra mentre le opengl uno orientato a sinistra.
    Gr1ph00n, grazie per l'interessamento ma (non voglio sembrare troppo pignolo) il link che mi hai suggerito parla in sostanza del metodo projection.

    I miei dubbi non derivano dai metodi di xna per la camera ma dalla trigonometria e le matrici (ma voglio precisare che so calcolare le matrici e so anche creare le matrici di trasformazione).

    Ti ripropongo il problema se ti interessa (forse è colpa mia, non mi sono espresso correttamente finora):

    Conoscendo la posizione della mia telecamera voglio ruotare la sua visuale non appena l'utente muove il mouse. Per ruotare la visuale dovrò ruotare (usando la trigonometria e le matrici) il punto focalizzato dalla camera (è il secondo parametro del metodo Matrix.CreateLookAt). Si userà il metodo CreateFromYawPitchRoll per creare una matrice di rotazione attorno a tutti e tre gli assi di rotazione.
    N.B. conosco e so usare i metodi di xna per creare la camera con la visuale.

    Ecco il codice:

    // Determina l'angolo di rotazione in base al mouse.
    camera_rotazione -= (float)(mouseState.X - graphics.PreferredBackBufferWidth / 2) * elapsedSec;
    camera_beccheggio += (
    float)(mouseState.Y - graphics.PreferredBackBufferHeight / 2) * elapsedSec;


    // Riposiziona il mouse al centro del viewport per le successive letture.
    Mouse.SetPosition(graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight / 2);

    // Crea una matrice di rotazione secondo i vari angoli di rotazione
    Matrix rot = Matrix.CreateFromYawPitchRoll(camera_rotazione, camera_beccheggio, camera_rollio);
    // Calcola i vettori per la matrice di rotazione corrente.
    Vector3 camUp = newVector3(rot.M21, rot.M22, rot.M23); //prendo la seconda riga di rot
    Vector3 camLook = newVector3(rot.M31, rot.M32, rot.M33); //prendo la terza riga di rot
    Vector3 camLeft = newVector3(rot.M11, rot.M12, rot.M13); //prendo la prima riga di rot

    //per spostare la telecamera (e non la visuale)
    if (keyState.IsKeyDown(Keys.A))
    camera_posizione += speed * elapsedSec * camLeft;
    if (keyState.IsKeyDown(Keys.D))
    camera_posizione -= speed * elapsedSec * camLeft;
    if (keyState.IsKeyDown(Keys.W))
    camera_posizione += speed * elapsedSec * camLook;
    if (keyState.IsKeyDown(Keys.S))
    camera_posizione -= speed * elapsedSec * camLook;

    //Si trova nel metodo Update perch essa verr aggiornata ad ogni fotogramma
    Mie_variabili.View = Matrix.CreateLookAt(camera_posizione, camera_posizione + camLook, camUp);

    ----------------------
    Quello che non riesco a capire è perchè i tre vettori (che ho messo in grassetto) devono contenere le righe della matrice di rotazione. Cosa rappresentano queste righe?
    Il tutto funziona ma non riesco a capirne il senso. Perchè la terza riga della matrice di rotazione (rot) contiene le coordinate esatte della visuale ruotata?

    Spero che possiate aiutarmi e che possa essere di aiuto a tutti i visitatori del forum in difficoltà con questi concetti (che non riguardano xna ma la programmazione dei videogiochi in generale).

  3. #53

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio

    Il tutto funziona ma non riesco a capirne il senso. Perchè la terza riga della matrice di rotazione (rot) contiene le coordinate esatte della visuale ruotata?
    Ah quindi a te funziona il tutto, non mi era risultato chiaro dai precedenti posts
    Comunque, quello che tu vuoi sapere è perchè si prendono proprio quei valori. Come ben sai, quello che viene renderizzato dall'engine è ciò che si trova nel campo visivo della telecamera ovvero in una piramide tronca detta in inglese "frustum". Per poter realizzare questa piramide tronca occorrono 6 piani (1 per ogni faccia della piramide) che verranno estratti proprio dalla projection matrix
    Ora andando a muoversi nello spazio i valori della matrice cambieranno e di conseguenza quelli dei piani e quindi del frustum e della camera, etc...
    Questo documento spiega come si estraggono i piani dalla matrice (e perchè proprio quei valori)

    http://www2.ravensoft.com/users/ggri...extraction.pdf

    Comunque sul sito msdn c'è tutto ciò che serve sapere http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.matrix.aspx

    Se hai ancora qualche dubbio, sai dove chiedere

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Gr1ph00n Visualizza Messaggio
    Ah quindi a te funziona il tutto, non mi era risultato chiaro dai precedenti posts
    Comunque, quello che tu vuoi sapere è perchè si prendono proprio quei valori. Come ben sai, quello che viene renderizzato dall'engine è ciò che si trova nel campo visivo della telecamera ovvero in una piramide tronca detta in inglese "frustum". Per poter realizzare questa piramide tronca occorrono 6 piani (1 per ogni faccia della piramide) che verranno estratti proprio dalla projection matrix
    Ora andando a muoversi nello spazio i valori della matrice cambieranno e di conseguenza quelli dei piani e quindi del frustum e della camera, etc...
    Questo documento spiega come si estraggono i piani dalla matrice (e perchè proprio quei valori)

    http://www2.ravensoft.com/users/ggri...extraction.pdf

    Comunque sul sito msdn c'è tutto ciò che serve sapere http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.matrix.aspx

    Se hai ancora qualche dubbio, sai dove chiedere
    Il problema non è la piramide tronca o il metodo projection (questi sono problemi che approfondirò più avanti). L'unica cosa che non capisco (del precedente post) è perchè bisogna estrarre le righe della matrice rot, soprattutto la terza che sembra avere tutte le tre rotazioni aggiornate (tenendo conto di una circonferenza unitaria). Estrarre queste tre righe equivale a moltiplicare rot per i vettori 1;0;0 0;1;0 0;0;1 detti anche versori (se non sbaglio). E' il mio unico dubbio (ne aveva parlato anche Ronin ma non è stato molto chiaro). Se qualcuno me lo toglie, dovrei essere a posto (insisto nel dire che è più un problema di logica e trigonometria con le matrici che un problema di conoscenza della telecamera).

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

    Predefinito Riferimento: domanda su XNA (c#)

    I vettori [1;0;0] [0;1;0] [0;0;1] sono anche detti "versori".

    Sapreste dirmi che senso ha usare i versori per cambiare la visuale della telecamera?
    Questi versori vengono moltiplicati per la matrice di rotazione, ottenendo dunque le righe di quest'ultima. Perchè?

    Vi prego aiutatemi.
    Ultima modifica di Toty_; 10-09-09 alle 20:55:23

  6. #56

    Predefinito Riferimento: domanda su XNA (c#)

    Perchè andando a definire una matrice di rotazione, definisci una speciale matrice dove ogni riga stabilisce un asse che si trova rispettivamente a 90° dagli altri e che quindi ortogonale agli altri assi. Questo è proprio il motivo per cui si hanno dei versori. Ti invito comunque a leggere questa pagina http://www.euclideanspace.com/maths/...ix/orthogonal/ per poter capire meglio le regole usate

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Gr1ph00n Visualizza Messaggio
    Perchè andando a definire una matrice di rotazione, definisci una speciale matrice dove ogni riga stabilisce un asse che si trova rispettivamente a 90° dagli altri e che quindi ortogonale agli altri assi. Questo è proprio il motivo per cui si hanno dei versori. Ti invito comunque a leggere questa pagina http://www.euclideanspace.com/maths/...ix/orthogonal/ per poter capire meglio le regole usate
    Grazie ma quel sito non mi dice niente di particolarmente nuovo.

    Mettiamola così: sapete dirmi come fare a ruotare la telecamera attorno ad un punto (stavolta come un gioco in terza persona, tipo splinter cell, la camera ruota attorno a Fisher). Non vi sto chiedendo lezioni di matrici (per carità, non sarei così bastardo).

    Allora, per compiere delle rotazioni anche oblique devo moltiplicare le matrici di rotazione attorno ai tre assi (RotazioneY*RotazioneX*RotazioneZ, che in XNA possono comodamente farlo invocando CreateFromYawPitchRoll).
    Il problema è far ruotare la telecamera (che alla fine è solo un punto) attorno ad un punto che non è l'origine.
    Un sito diceva di traslare prima il centro della rotazione nell'origine poi moltiplicare per la matrice di rotazione e alla fine moltiplicare tutto per la traslazione del punto riposizionato nelle sue coordinate originarie (visto che prima è stato traslato nell'origine).
    Ho provato con una camera fps ma il beccheggio non va bene. Spero di ricevere consigli su una telecamera in terza persona in modo da arrivare alla soluzione.

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

    Predefinito Riferimento: domanda su XNA (c#)

    Perchè tutti dicono di moltiplicare le matrici in ordine inverso (es: A * B * C --> C * B * A)?

  9. #59

    Cool Riferimento: domanda su XNA (c#)

    Ciao ragazzi, c'è qualche modo per usare un suono o musica (mp3) memorizzato su una chiave USB in un gioco XNA? E se è possibile, come fare?

    Se uso mediaplayer.play(song) devo per forza avere i file audio nel mio context. Se invece i file mp3 fossero su un lettore esterno (magari un ipod)?

    Grazie

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio
    Perchè tutti dicono di moltiplicare le matrici in ordine inverso (es: A * B * C --> C * B * A)?
    Perchè dal sistema verranno lette al contrario.

    E cioè, se tu le setti in ordine A B C

    verrà letta prima la C, poi la B e poi la A,

    ottenendo probabilmente un effetto diverso da quello che desideravi.

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Seraph888 Visualizza Messaggio
    Perchè dal sistema verranno lette al contrario.

    E cioè, se tu le setti in ordine A B C

    verrà letta prima la C, poi la B e poi la A,

    ottenendo probabilmente un effetto diverso da quello che desideravi.
    Però con XNA questo non succede.
    Intendo dire che ottengo l'effetto desiderato senza invertire l'ordine. Come mai?

  12. #62
    Il Puppies L'avatar di WILEz
    Data Registrazione
    12-07-02
    Località
    TERNI
    Messaggi
    386

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da ziogico Visualizza Messaggio
    Ciao ragazzi, c'è qualche modo per usare un suono o musica (mp3) memorizzato su una chiave USB in un gioco XNA? E se è possibile, come fare?

    Se uso mediaplayer.play(song) devo per forza avere i file audio nel mio context. Se invece i file mp3 fossero su un lettore esterno (magari un ipod)?

    Grazie
    Scarica la libreria "irrKlang.NET": http://www.ambiera.com/irrklang/ e potrai usare WAV, MP3, OGG, MOD, XM, IT, S3M ecc.. senza problemi, anche direttamente da file su un percorso esterno tipo una chiave USB o ipod.. Io c'ho fatto un lettore karaoke Mp3 Tra l'altro questa libreria viene usata anche per giochi professionali tipo Word of Goo ecc..

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da WILEz Visualizza Messaggio
    Scarica la libreria "irrKlang.NET": http://www.ambiera.com/irrklang/ e potrai usare WAV, MP3, OGG, MOD, XM, IT, S3M ecc.. senza problemi, anche direttamente da file su un percorso esterno tipo una chiave USB o ipod.. Io c'ho fatto un lettore karaoke Mp3 Tra l'altro questa libreria viene usata anche per giochi professionali tipo Word of Goo ecc..
    Ma tu sei il vero Wilez che ha messo la guida su internet o sei solo uno che si è messo questo nome?!?

  14. #64
    Il Puppies L'avatar di WILEz
    Data Registrazione
    12-07-02
    Località
    TERNI
    Messaggi
    386

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio
    Ma tu sei il vero Wilez che ha messo la guida su internet o sei solo uno che si è messo questo nome?!?
    Eheh sono io

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

    Predefinito Riferimento: domanda su XNA (c#)

    Wilez, senza offesa ma la parte sulla heightmap sembra arabo . Sono molto scoraggiato.

    Chiedo aiuto a tutti gli utenti del forum (wilez compreso): vorrei capirci qualcosa su come creare un terreno (magari con la heightmap) in XNA. Consigliarmi qualche sito (io non ho trovato niente di comprensibile) o almeno indirizzarmi agli argomenti che occorre conoscere per poter capire qualcosa sul terreno. E' incredibile, occorrono pagine e pagine di codice (non ne ho capita una). Mi sono impegnato tanto ultimamente (prima di capire le rotazioni, motivo per il quale ho aperto la discussione, ho buttato un mese perdendo la testa) ma stavolta è troppo complicato.

    La mia passione è quella di creare vg, vi prego venitemi incontro, sono troppo preoccupato! Aiuutooo.

  16. #66
    Il Puppies L'avatar di WILEz
    Data Registrazione
    12-07-02
    Località
    TERNI
    Messaggi
    386

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Toty_ Visualizza Messaggio
    Wilez, senza offesa ma la parte sulla heightmap sembra arabo . Sono molto scoraggiato.

    Chiedo aiuto a tutti gli utenti del forum (wilez compreso): vorrei capirci qualcosa su come creare un terreno (magari con la heightmap) in XNA. Consigliarmi qualche sito (io non ho trovato niente di comprensibile) o almeno indirizzarmi agli argomenti che occorre conoscere per poter capire qualcosa sul terreno. E' incredibile, occorrono pagine e pagine di codice (non ne ho capita una). Mi sono impegnato tanto ultimamente (prima di capire le rotazioni, motivo per il quale ho aperto la discussione, ho buttato un mese perdendo la testa) ma stavolta è troppo complicato.

    La mia passione è quella di creare vg, vi prego venitemi incontro, sono troppo preoccupato! Aiuutooo.

    E di che ti preoccupi? Mica ti corre dietro nessuno, prendi le cose con calma, hai tutto il tempo per imparare cose nuove, a piccoli passi. Se non riesci a superare un ostacolo, non incaponirti troppo, prova e riprova, ma se proprio non ci riesci, passa ad altro, forse quell'argomento non è ancora alla tua portata, più avanti avrai più esperienza e potrai capire meglio anche quello.
    Le heightmap non sono proprio il primo argomento che si possa imparare, per questo non ho spiegato molto sulla guida, avrei dovuto spiegare un sacco di altre cose prima, ho messo solo il codice da usare per creare una mappa.
    Ti consiglio di concentrarti prima su cose più semplici.
    Ultima modifica di WILEz; 14-10-09 alle 21:22:07

  17. #67
    Il Puppies L'avatar di WILEz
    Data Registrazione
    12-07-02
    Località
    TERNI
    Messaggi
    386

    Predefinito Riferimento: domanda su XNA (c#)

    scusate..doppio post.

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da WILEz Visualizza Messaggio
    E di che ti preoccupi? Mica ti corre dietro nessuno, prendi le cose con calma, hai tutto il tempo per imparare cose nuove, a piccoli passi. Se non riesci a superare un ostacolo, non incaponirti troppo, prova e riprova, ma se proprio non ci riesci, passa ad altro, forse quell'argomento non è ancora alla tua portata, più avanti avrai più esperienza e potrai capire meglio anche quello.
    Le heightmap non sono proprio il primo argomento che si possa imparare, per questo non ho spiegato molto sulla guida, avrei dovuto spiegare un sacco di altre cose prima, ho messo solo il codice da usare per creare una mappa.
    Ti consiglio di concentrarti prima su cose più semplici.
    Finendo la tua guida acquisirò le conoscenze necessarie per imparare la height map? Sai, su internet si trova soltanto la tua guida, non ci sono altre possibilità!

    Ci sono altri modi per creare un terreno con le relative collisioni?

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

    Predefinito Riferimento: domanda su XNA (c#)

    Potreste elencarmi gentilemente gli argomenti da conoscere per poter creare una height map (tipo vertexbuffer, vertex declaration, ecc...)?

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

    Predefinito Riferimento: domanda su XNA (c#)

    Per creare una heightmap nel senso classico del termine ti serve sapere come:

    - aprire e leggere i dati da una immagine qualsiasi(bitmap, jpeg, png,tga, scegli tu)

    - tenere conto che l'immagine deve essere in scala di grigio a 256 colori. Ogni pixel dell'immagine rappresenta l'altezza a cui è posizionato il vertice della mappa, il nero (0) significa che il vertice è all'altezza minima..per esempio zero, il bianco (255) è il vertice più alto della tua mappa. Le sfumature di grigio in mezzo tra 0 e 255 indicano le varie "vie di mezzo"

    - a questo punto ti crei un vertex buffer di NxN vertici, dove N indica la larghezza, e di conseguenza l'altezza, della tua texture. Si usa fare texture qudrate, quindi NxN va bene.

    - ti fai due bei cicli for
    Codice:
    for(int i=0;i<N;i++)
      for(int j=0;j<N;j++)
         vertice[i][j].x = i;
         vertice[i][j].y = j;
         vertice[i][j].z = valoreDelPixelImmagine(i,j);
    questo supponendo che z rappresenti l'asse che punta in alto. valoreDelPixelImmagine(i,j) è un metodo che ti devi fare tu e che legge appunto il valore contenuto alle coordinate i,j della tua immagine.

    - dopo aver fatto questo ti crei il tuo bel index buffer

    - Render.


    E questo è il minimo, perchè ti accorgerai che con un metodo così diretto potrai disegnare mappe piccolissime altrimenti il pc ti collassa. Quando arrivi a fare questo che ti ho elencato sopra, allora potrai dare uno sguardo a tutte le tecniche di partizionamento dello spazio e culling, in modo da poter disegnare mappe dettagliatissime ed enormi..tipo crysis.

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

    Predefinito Riferimento: domanda su XNA (c#)

    Grazie mille, Cherno!
    Ci vorrà un miracolo per riuscire a fare queste cose.

    Come prima cosa, dovrò cominciare a studiare cosa sono i vertex e index buffer e tutto il resto.

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

    Predefinito Riferimento: domanda su XNA (c#)

    Ma va che miracolo: solo un pò di metodo. Comunque si, devi assolutamente capire come devono essere organizzati i dati all'interno dei vari buffer.

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

    Predefinito Riferimento: domanda su XNA (c#)

    Sto studiando vertex e index buffer ma non ho capito una cosa: se importiamo un modello 3D dall'esterno (per esempio, con estensione x) non occorre creare un vertex buffer? Come è possibile? In quel caso, dove vengono memorizzati i vertici del modello?

    Il vertex buffer si utilizza soltanto per creare modelli da programma (es: terreno, primitive come triangoli e quadrati)?

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

    Predefinito Riferimento: domanda su XNA (c#)

    Vertex ed index buffer sono la base con la quale l'sdk comunica con la scheda video. Nel caso dei file .x le informazioni di vertex/index buffer, sono contenute appunto all'interno del file.

    L'sdk li carica per te nelle sue strutture dati e quando fai modello.disegna, ci pensa lei a caricare e scaricare le varie risorse(index/vertex buffer, shader, texture ecc ecc)

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

    Predefinito Riferimento: domanda su XNA (c#)

    Citazione Originariamente Scritto da Cherno Visualizza Messaggio
    Vertex ed index buffer sono la base con la quale l'sdk comunica con la scheda video. Nel caso dei file .x le informazioni di vertex/index buffer, sono contenute appunto all'interno del file.

    L'sdk li carica per te nelle sue strutture dati e quando fai modello.disegna, ci pensa lei a caricare e scaricare le varie risorse(index/vertex buffer, shader, texture ecc ecc)
    Perfetto. Grazie.

    Per riuscire a creare una heightmap, cosa mi occorre conoscere ancora (oltre i vertex/index buffer)?
    Devo studiare anche texture e shader?

Pag 3 di 4 PrimaPrima 1234 UltimaUltima

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