Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    [C#] Impostare camera DirectX

    Ciao a tutti,

    vi spiego il problema...

    Voglio creare un gioco 2D e quindi ho creato una funzione che mi visualizza gli sprites nel device.

    Funziona tutto tranne che una cosa...la visuale del device non si vuole spostare in nessun modo...
    all'inizio usavo dei vettori 2D poi sono passato ai 3D perchè pensavo fosse questo il problema..e invece niente...

    il codice è questo:

    codice:
      private void MainLoop()
            {
                device.Transform.View = Matrix.LookAtLH(new Vector3(0, 100000, 0), new Vector3(0,0, 0), new Vector3(0, 1, 0));
    
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkBlue, 1, 0);
                device.BeginScene();
    
                UpdateFramerate();
                DrawSprites();
                if (RunMode == true)
                {
                    _player.PlayerMove();
                }
                drawTextLines();
    
                device.EndScene();
                device.Present();
            }
    vedo sempre il solito punto...
    ho anche provato a muovere la posizione ma niente...

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

    Re: [C#] Impostare camera DirectX

    Originariamente inviato da GhostFire
    Ciao a tutti,

    vi spiego il problema...

    Voglio creare un gioco 2D e quindi ho creato una funzione che mi visualizza gli sprites nel device.

    Funziona tutto tranne che una cosa...la visuale del device non si vuole spostare in nessun modo...
    all'inizio usavo dei vettori 2D poi sono passato ai 3D perchè pensavo fosse questo il problema..e invece niente...

    il codice è questo:

    codice:
      private void MainLoop()
            {
                device.Transform.View = Matrix.LookAtLH(new Vector3(0, 100000, 0), new Vector3(0,0, 0), new Vector3(0, 1, 0));
    
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.DarkBlue, 1, 0);
                device.BeginScene();
    
                UpdateFramerate();
                DrawSprites();
                if (RunMode == true)
                {
                    _player.PlayerMove();
                }
                drawTextLines();
    
                device.EndScene();
                device.Present();
            }
    vedo sempre il solito punto...
    ho anche provato a muovere la posizione ma niente...
    Ciao, se non ricordo male, gli sprites rimangono sempre "attaccati" alla visuale, infatti spesso vengono utilizzati per creare effetti tipo il fucile o il mirino negli sparatutto... quindi in realtà la visuale si muove, ma lo sprite la segue. probabilmente, se mettessi una mesh davanti alla tua visuale, vedresti che la camera si sposta, ma lo sprite segue la visuale.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    Re: Re: [C#] Impostare camera DirectX

    Originariamente inviato da U235
    Ciao, se non ricordo male, gli sprites rimangono sempre "attaccati" alla visuale, infatti spesso vengono utilizzati per creare effetti tipo il fucile o il mirino negli sparatutto... quindi in realtà la visuale si muove, ma lo sprite la segue. probabilmente, se mettessi una mesh davanti alla tua visuale, vedresti che la camera si sposta, ma lo sprite segue la visuale.
    Mi ero fatto anche un idea del genere...
    per far scorrere la camera in questo caso come potrei fare?
    dovrei creare dei piani 3D ed applicargli le texture?

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

    Re: Re: Re: [C#] Impostare camera DirectX

    Originariamente inviato da GhostFire
    Mi ero fatto anche un idea del genere...
    per far scorrere la camera in questo caso come potrei fare?
    dovrei creare dei piani 3D ed applicargli le texture?
    Ciao,
    la camera ha senso farla scorrere solo se usi oggetti 3d.
    gli ogetti 3d in directx li crei usando le mesh alla quale poi applichi la texture utilizzando le coordinate UV per mapparle come vuoi tu.
    purtroppo è passato parecchio tempo da quando programmavo con directx, quindi non ricordo tutto, e non ho niente per rinfrescarmi la memoria. comunque ricordo che per creare la mesh dovevo caricare i suoi vettori, i vertici, indici e creare le adiacenze, scegliere i materiali e in fine applicare le texture con le coordinate UV appunto.

    diciamo che directx non è proprio un framework immediato, perlomeno se non hai già una conoscenza della grafica 3d. In aiuto però possono arrivare i vari programmi tipo 3d studio max, dove ti costruisci il modello, mappi le coordinate ecc. salvando tutto in file compatibili (al tempo si usavano plugin, ma ora credo che sia già incluso) con directx, poi ti creavi la tua routine per caricarli nel tuo programma, e li usavi nella scena. Solo allora potevi incominciare a parlare di movimenti del mondo e della camera con operazioni matriciali.

    comunque ormai XNA ha reso molto più semplice tutta la creazione, oltretutto, puoi trovare molti tutorial e tantissime risorse che al tempo erano solo un sogno, andava fatto tutto a mano... ad esempio il caricamento dei modelli e i motori che gestiscono la fisica e le collisioni dell'oggetto... ora ne trovi degli ottimi già pronti e XNA-compatibili!

    Quindi il mio consiglio, a meno che non abbia delle esigenze particolari che renderebbero solo più complicata la cosa, è quello di passare a XNA.


  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    Re: Re: Re: Re: [C#] Impostare camera DirectX

    Originariamente inviato da U235
    Ciao,
    la camera ha senso farla scorrere solo se usi oggetti 3d.
    gli ogetti 3d in directx li crei usando le mesh alla quale poi applichi la texture utilizzando le coordinate UV per mapparle come vuoi tu.
    purtroppo è passato parecchio tempo da quando programmavo con directx, quindi non ricordo tutto, e non ho niente per rinfrescarmi la memoria. comunque ricordo che per creare la mesh dovevo caricare i suoi vettori, i vertici, indici e creare le adiacenze, scegliere i materiali e in fine applicare le texture con le coordinate UV appunto.

    diciamo che directx non è proprio un framework immediato, perlomeno se non hai già una conoscenza della grafica 3d. In aiuto però possono arrivare i vari programmi tipo 3d studio max, dove ti costruisci il modello, mappi le coordinate ecc. salvando tutto in file compatibili (al tempo si usavano plugin, ma ora credo che sia già incluso) con directx, poi ti creavi la tua routine per caricarli nel tuo programma, e li usavi nella scena. Solo allora potevi incominciare a parlare di movimenti del mondo e della camera con operazioni matriciali.

    comunque ormai XNA ha reso molto più semplice tutta la creazione, oltretutto, puoi trovare molti tutorial e tantissime risorse che al tempo erano solo un sogno, andava fatto tutto a mano... ad esempio il caricamento dei modelli e i motori che gestiscono la fisica e le collisioni dell'oggetto... ora ne trovi degli ottimi già pronti e XNA-compatibili!

    Quindi il mio consiglio, a meno che non abbia delle esigenze particolari che renderebbero solo più complicata la cosa, è quello di passare a XNA.

    Grazie per la risposta...si con la grafica 3d ho fatto parecchia esperienza...

    però vorrei far scorrere lo schermo perchè ho intenzione di fare un gioco side-scrolling alla Metal Slug o Super Mario per esempio..

    Mi dispiacerebbe dover rifare tutta la parte della programmazione per via del 3D...

    soprattutto perchè ho creato il sistema di collisioni e la fisica per il mio giochino 2D e stava venendo una cosa davvero carina..

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

    Re: Re: Re: Re: Re: [C#] Impostare camera DirectX

    Originariamente inviato da GhostFire
    Grazie per la risposta...si con la grafica 3d ho fatto parecchia esperienza...

    però vorrei far scorrere lo schermo perchè ho intenzione di fare un gioco side-scrolling alla Metal Slug o Super Mario per esempio..

    Mi dispiacerebbe dover rifare tutta la parte della programmazione per via del 3D...

    soprattutto perchè ho creato il sistema di collisioni e la fisica per il mio giochino 2D e stava venendo una cosa davvero carina..
    Capisco... il problema è che con il 3d ti complichi un pò la vita... comunque se vuoi continuare ad usare il 3d, allora dovresti usare la mesh "Box" che ti fornisce la classe Mesh (se non erro) :
    codice:
    Mesh box = Mesh.Box(device,GrandezzaX,GrandezzaY,GrandezzaZ);
    ottenendo così una mesh con 6 facce tipo "cubica", ma le dimensioni le defisci tu, ti conviene farla quasi piatta se vuoi usarla come 2d, in genere directx usa la Z come profondità (occhio che alcuni programmi invertono gli assi), poi dovrersti impostare il formato dei vertici (non ricordo se puoi farlo nel metodo stesso con dei parametri), qualcosa tipo VertexFormat.Texture0 (se non sbaglio puoi impostare fino a 8 texture) e per ogni vertice imposti la coordinata della texture, quindi (sempre se non ricordo male!) angolo alto a sx 0.0, angolo alto a dx 0.1, angolo basso a sx 1.0 angolo basso a dx 1.1.

    mentre per il movimento dovresti far scorrere la camera solo a dx o sx (solo traslazione, senza nessuna rotazione ovviamente).

    ma comunque continuo a sconsigliari questo approccio, è scomodo, difficile, dispendioso e inutile per un gioco 2d, nonchè poco professionale... riflettici su, perchè se ciò che hai fatto fino ad adesso per il tuo programma ti ha portato via del tempo, seguire questo approccio ti richiederà i 3/4 del tempo che hai gia utilizzato in più.

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.