[3dGameProg]Come posso fare in modo che...
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 13 di 13

Discussione: [3dGameProg]Come posso fare in modo che...

Cambio titolo
  1. #1
    --]-[eLioS-- L'avatar di Squall L.
    Registrato il
    10-02
    Messaggi
    689

    [3dGameProg]Come posso fare in modo che...

    Da alcuni anni programmo giochini 3d usando l'Irrlicht.
    E' da molto tempo che mi ronza l'idea di creare un gioco di combattimento usando spade (anche un action-rpg), però mi servirebbe un'idea su come dovrebbe funzionare l'attacco con la spada.
    -La spada è un modello diverso dal pg ma collegato alla mano;
    -Il colpo in base alla parte del corpo colpita deve infliggere un tot di danni;
    -In base all a parte colpita, dovrebbe staccarsi un pezzo del pg (cooncetto un po' crudo );

    Ecco. vorrei sapere come implementare questo (in generale, ma anche con l'irr se potete). Cio' che non mi è chiaro è se il modello deve essere già creato a pezzi e poi ad ogni colpo far sparire il sotto-oggetto oppure se si può fare con textures semi trasparenti che cambiano lo stato del pg? e poi, come individuare la parte colpita dalla spada?

    Grazie a chiunque risponda!
    ______The Truth is Out There______



  2. #2
    Bannato L'avatar di Eclipse
    Registrato il
    02-04
    Località
    C++atania
    Messaggi
    5.604
    con le textures semitrasparenti non puoi fare praticamente nulla, poichè non si vedrebbe la sezione del taglio e perciò il risultato sarebbe pessimo.

    il metodo più veloce con irrlicht sarebbe fare uno scheletro completo ma solo con il torso in 3d e attaccare gli altri pezzi (testa, braccia ecc) come figli dei rispettivi joints dello scheletro, in modo che si muovano seguendo le animazioni dello scheletro.
    Per le collisioni, visto che ogni pezzo è separato dagli altri, puoi benissimo far partire un raggio dall'impugnatura della spada fino alla punta e testare le collisioni con i pezzi del nemico usando quello (non uso irrlicht da almeno 3 anni ma ricordo che ci stava una funzione che calcolava la collisione usando un raggio e una mesh, il nome non lo ricordo.. , cercala sulla documentazione!).
    Una volta colpito un arto puoi togliere "punti vita" a quella parte del corpo (magari fai una struttura o un array che contiene tutti i punti vita, e mettine molti di più per testa, torso e gambe, lasciandone meno per i vari pezzi delle braccia) e quando raggiungono 0 puoi farla staccare.
    Se inoltre vuoi aggiungere un bello e copioso effetto di sangue la funzione delle collisioni raggio - mesh se non erro tornava anche il punto di collisione, perciò puoi fare apparire a quel punto varie particles di sangue che schizzano qua e là

    Il difetto di questa tecnica è che i tuoi modelli saranno un po' come quelli di quake 3 o del primo alien vs predator, anche se modellati bene si vedrà che sono fatti con vari pezzi poichè sulle giunture non ci saranno deformazioni ma comprenetrazioni. In alternativa puoi creare due versioni per ogni arto, una riggata bene con l'animazione e il resto del modello e una versione "tagliata". Prima però ti consiglio di implementare il metodo che ho spiegato ah, oltre alle particles di sangue non dimenticare di aggiungere l'arto tagliato che cade al suolo

    spero d'esserti stato d'aiuto, in bocca al lupo, e attento che non ti tagli qualche arto masticandoti
    Ultima modifica di Eclipse; 28-01-2007 alle 12:40:24

  3. #3
    --]-[eLioS-- L'avatar di Squall L.
    Registrato il
    10-02
    Messaggi
    689
    Grazie mille Eclipse! A dire il vero ho cominciato a programmare giochi 3d proprio con la tua guida ai tempi di playerworld (per non parlare del topic ultracentenario proprio su questa sezione di GR ).

    Per il fatto del raggio che dici tu, l'ho già usato in un fps che ho fatto e non è nulla di difficile. Il problema è che non so se è applicabile visto che il raggio colpirebbe il nemico anche a distanza così invece voglio che il colpo sia subito solo se la spada tocchi l'oggetto.
    ______The Truth is Out There______



  4. #4
    *
    Registrato il
    09-06
    Messaggi
    7.701
    i modelli 3d si usano in formato direct-x [*.x] ?
    *

  5. #5
    FRAK! L'avatar di The Dix
    Registrato il
    09-05
    Località
    Roma
    Messaggi
    11.830
    scusa visto che a quanto ne so la guida di eclipse è un po datata non è che visto che tu hai ancora le mani in iirrlicht ci fai una guida aggiornata? ^^

    ~S!~

  6. #6
    --]-[eLioS-- L'avatar di Squall L.
    Registrato il
    10-02
    Messaggi
    689
    ok, mi ci vuole un po di tempo (tempo di esami....) ma la faccio. Preferenze sugli argomenti da trattare?
    ______The Truth is Out There______



  7. #7
    Bannato L'avatar di Eclipse
    Registrato il
    02-04
    Località
    C++atania
    Messaggi
    5.604
    Citazione Squall L.
    Grazie mille Eclipse! A dire il vero ho cominciato a programmare giochi 3d proprio con la tua guida ai tempi di playerworld (per non parlare del topic ultracentenario proprio su questa sezione di GR ).

    Per il fatto del raggio che dici tu, l'ho già usato in un fps che ho fatto e non è nulla di difficile. Il problema è che non so se è applicabile visto che il raggio colpirebbe il nemico anche a distanza così invece voglio che il colpo sia subito solo se la spada tocchi l'oggetto.
    prego

    riguardo al raggio, mi pare di ricordare che con quella funzione di irrlicht potevi anche mettere la fine del raggio, cioè fare un semplice segmento, in modo da non colpire le cose a distanza, dovresti perciò mettere l'inizio sull'elsa della spada e la fine sulla punta.
    Se mi sbaglio e la funzione calcola la collisione usando una retta puoi lo stesso ovviare molto facilmente al problema semplicemente con un if del tipo "se il raggio fa la collisione e (and) se la distanza del punto di collisione rispetto al punto iniziale del raggio è minore o uguale alla lunghezza della spada allora ha colpito il nemico"

  8. #8
    Bannato L'avatar di Eclipse
    Registrato il
    02-04
    Località
    C++atania
    Messaggi
    5.604
    Citazione hacko
    i modelli 3d si usano in formato direct-x [*.x] ?
    irrlicht carica svariati formati, tra i quali ms3d, .x, md2 ecc

  9. #9
    --]-[eLioS-- L'avatar di Squall L.
    Registrato il
    10-02
    Messaggi
    689
    Grazie ancora! guardando tra la documentazione api, la funzione di cui parli dovrebbe essere questa:
    -------------------------------------
    getSceneNodeFromRayBB ( core::line3d< f32 > ray,
    s32 idBitMask = 0,
    bool bNoDebugObjects = false
    )
    Returns the scene node nearest to ray.start, which collides with the ray and matches the idBitMask, if the mask is not null. If no scene node is found, 0 is returned.
    -----------------------------------------------
    Domani prover&#242;.

    Per i formati supportati:
    MODELLI 3D: Maya (.obj), 3DStudio (.3ds), COLLADA (.dae), DeleD (.dmf), Milkshape (.ms3d), Quake 3 levels (.bsp), Quake2 models (.md2), Microsoft DirectX (.X)

    Textures: Windows Bitmap (.bmp), Portable Network Graphics (.png), Adobe Photoshop (.psd), JPEG File Interchange Format (.jpg), Truevision Targa (.tga), ZSoft Painbrush (.pcx)
    ______The Truth is Out There______



  10. #10
    Bannato L'avatar di Eclipse
    Registrato il
    02-04
    Località
    C++atania
    Messaggi
    5.604
    s&#236; &#232; proprio quella, praticamente calcola la collisione di un raggio e una bounding box (che non sarebbe altro che la "scatola" che si viene a creare unendo i quattro vertici pi&#249; lontani del modello)
    la struttura core:line3d se non erro penso abbia "start" e "end" perci&#242; basta mettere inizio e fine sulla spada
    idBitMask puoi usarlo per non calcolare collisioni con cose che non ti interessano, per esempio con lo scenario, la funzione ti torna un puntatore allo scene node perci&#242; poi per sapere quale oggetto &#232; in collisione ti basta un for che va per tutte le parti del nemico e qualcosa tipo if (node_collisione==parte_nemico[i]) collisione... adesso aspettiamo una demo del tuo gioco

  11. #11
    *
    Registrato il
    09-06
    Messaggi
    7.701
    a volte faccio qualche lavoro di conversione 3d,perci&#242; volevo sapere un p&#242;...
    *

  12. #12
    --]-[eLioS-- L'avatar di Squall L.
    Registrato il
    10-02
    Messaggi
    689
    Oggi ho fatto qualcosina... lo scoglio che ho trovato è collegare la spada al joint dello scheletro della mano, visto che anche se collego la spada con la funzione

    manoDx =pg->getMS3DJointNode("nomejoint");
    manoDx->addChild(spada);

    la spada è spostata di qualche decina di pixel più in là.
    Ora cerco di reperire qualche altro modello 3d per vedere se il problema è dovuto al modello che ho usato io.

    Comunque, si rilascerò una demo appena ci sarà qualcosa da rilasciare!
    ______The Truth is Out There______



  13. #13
    Bannato L'avatar di Eclipse
    Registrato il
    02-04
    Località
    C++atania
    Messaggi
    5.604
    Citazione Squall L.
    Oggi ho fatto qualcosina... lo scoglio che ho trovato è collegare la spada al joint dello scheletro della mano, visto che anche se collego la spada con la funzione

    manoDx =pg->getMS3DJointNode("nomejoint");
    manoDx->addChild(spada);

    la spada è spostata di qualche decina di pixel più in là.
    Ora cerco di reperire qualche altro modello 3d per vedere se il problema è dovuto al modello che ho usato io.

    Comunque, si rilascerò una demo appena ci sarà qualcosa da rilasciare!
    devi semplicemente spostare l'origine del modello, non è un problema del modello ovviamente, non c'entra un cappero, e non troverai mai in rete un modello con l'origine proprio sull'elsa.
    Generalmente quando si salvano dei modelli 3d li si fanno con l'origine al centro del modello, perciò scaricati milkshape, importa il modello e spostalo facendo combaciare l'origine con l'elsa della spada, poi salvalo .x o .3ds e fine puoi anche ruotarlo o inclinarlo di poco per farlo combaciare sempre alla perfezione

Regole 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
  •