• Benvenuto in Making Videogames!
  • Condividi la tua passione!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati



Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Title: irrlicht 1.7
Modi discussione
#1
ciao a tutti, sono nuovo in questo forum: ho bisogno di aiuto!!! ho un progetto che ho iniziato tempo fa (2008) però ora non funziona piu dovuto al fatto che ho una nuova versione di irrlicht e che ora lavoro su windows 7 invece che xp. quindi volevo chiedere a qualcuno se mi potesse aiutare per favore a scrivere un progetto dove possa importare oggetti statici ( .obj .dmf )
personaggo che si muove a secondo dei comandi e come impostare una camera che segua il personaggio. per essere più chiaro vorrei fare una cosa tipo: http://www.youtube.com/watch?v=evUd9Us5Z...re=related


grazie mille!!!
 
Reply
#2
praticamente un platform con grafica 3d
 
Reply
#3
(18-10-2010, 05:13 PM)zapetino Ha scritto: praticamente un platform con grafica 3d

si ma molto più semplice. io ho il paesaggio gli oggetti e il personaggio. tutto in obj o dmf. quello che mi interessa, sarebbe:
1.come posso fare una camera a scorrimento 2d che vada a destra o a sinistra, a secondo di dove vada il personaggio,
2.saper muovere il personaggio a sinistra o a destra,
3.e in fine( questo casomai sarebbe l'ultima cosa) le collisioni per poterlo far saltare sopra qualcosa....chiedo troppo,no?? Big Grin
 
Reply
#4
no nn chiedi troppo
io del c++ n capisco molto quindi per le altre cose nn so risponderti
 
Reply
#5
Innanzitutto configuri l'ambiente di sviluppo e installi irrlicht (in caso non l'avessi già fatto) seguendo questa guida: link


Inoltre ti informo che irrlicht per oggetti animati (es. personaggio che cammina) supporta i formati:
B3D files (.b3d, r, skeleton)
Microsoft DirectX (.x, r) (binary & text, skeleton)
Milkshape (.ms3d, r, skeleton)
Quake 3 models (.md3, r, morph)
Quake 2 models (.md2, r, morph)

Mentre per quelli statici (es. ambientazione) supporta i formati:
Irrlicht scenes (.irr, r/w)
Irrlicht static meshes (.irrmesh, r/w)
3D Studio meshes (.3ds, r)
Alias Wavefront Maya (.obj, r/w)
Lightwave Objects (.lwo, r)
COLLADA 1.4 (.xml, .dae, r/w)
OGRE meshes (.mesh, r)
My3DTools 3 (.my3D, r)
Pulsar LMTools (.lmts, r)
Quake 3 levels (.bsp, r)
DeleD (.dmf, r)
FSRad oct (.oct, r)
Cartography shop 4 (.csm, r)
STL 3D files (.stl, r/w)
PLY 3D files (.ply, r/w)

Quindi il tuo personaggio (formato obj o dmf) non potrai farlo camminare a destra e a sinistra, potrai farlo strisciare a destra e a sinistra (direi piuttosto bruttino come effetto). Quindi dovrai convertire il personaggio in un formato in cui irrlicht può riconoscere le animazioni.

Prima di iniziare il programma ho bisogno di sapere se sai un pò di oop.
Se la sai (anche solo una minima base visto la semplicità del programma) te la spiego mettendocene un pò, altrimenti te lo spiego con la programmazione strutturata (quella normale per intenderci, tipo il C).
 
Reply
#6
`ciao, grazie per il tuo aiuto!
ti spiego: irrlicht l'ho già installato ( versione 1.7 se devo cambiare versione dimmelo che installo uguale alla tua Big Grin) e dev c++ pure.
per quanto riguarda il tema personaggi: i personaggi con i cicli di animazione ce li ho in .x e tutto quello che ho in obj e dmf oppure irrmesh, è il paesaggio, gli oggetti di collisione statici etc etc.
io sto guardando i tutorial degli esempi che ci sono con irrlicht. non so quale usano. Fai tu io sono disposto a imparare di tutto!!! Big Grin Big Grin

grazie miille!!!
 
Reply
#7
non fai prima a costruirti un motore grafico ò.ò




(e mi prendete pure sul serio xD)

apparte gli scherzi aspetta un pochetino e steve saprà esaudire i tuoi mistici problemi <.<
 
Reply
#8
Premetto che non uso irrlicht (se va bene l'avrò provato per un paio di settimane quando stavo scegliendo l'engine da impararmi) e non sono bravo con la oop quindi ci saranno sicuramente mille modi per farlo meglio di come te lo propongo io.

Pensavo di strutturarlo così:
Una classe principale che gestisce le cose che ci sono in quasi tutti i programmi fatti in irrlicht (inizializza device, video driver, scene manager, ecc...).
Una classe per il player.
Una classe per il mondo.
Poi eventualmente si possono fare altre classi per gestire nemici, gui, input (in caso diventasse scomodo fare tutto nella classe player), ecc...

Per adesso ho fatto solo la classe principale, ho provato a farla abbastanza semplice e minimalista. Volendo è riutilizzabile.

File "Inizializza.h"
Codice:
#pragma once
#include <irrlicht.h>
#include <Windows.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

class Inizializza
{
private:
    IrrlichtDevice* mDevice;
    IVideoDriver* mDriver;
    ISceneManager* mSceneMgr;

public:
    Inizializza(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo);
    ~Inizializza(void);
    
    IrrlichtDevice* RetmDevice(void){ return mDevice; }
    IVideoDriver* RetmDriver(void){ return mDriver; }
    ISceneManager* RetmSceneMgr(void){ return mSceneMgr; }
    
    void Errore(LPCWSTR nomeErrore);
    void Device(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo);
    void Driver(void);
    void SceneMgr(void);
};

File "Inizializza.cpp"
Codice:
#include "Inizializza.h"

Inizializza::Inizializza(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo)
{
    Device(larghezza, altezza, fullscrn, titolo);
    Driver();
    SceneMgr();
}


Inizializza::~Inizializza(void)
{
    mDevice->drop();
}

void Inizializza::Errore(LPCWSTR nomeErrore)
{
    MessageBox(NULL, nomeErrore, L"Errore", MB_OK);
}

void Inizializza::Device(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo)
{
    mDevice = createDevice(EDT_DIRECT3D9, dimension2d<u32>(larghezza,altezza), 16U, fullscrn, false, false, 0);
    mDevice->setWindowCaption(titolo);
    if(!mDevice) Errore(L"mDevice");
}

void Inizializza::Driver(void)
{
    mDriver = mDevice->getVideoDriver();
    if(!mDriver) Errore(L"mDriver");
}

void Inizializza::SceneMgr(void)
{
    mSceneMgr = mDevice->getSceneManager();
    if(!mSceneMgr) Errore(L"mSceneMgr");
}

file "main.cpp"
Codice:
#include <irrlicht.h>
#include "Inizializza.h"

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;


int main()
{
    Inizializza App(800,600,0,L"Finestra di rendering - gioco puorcunicu"); // (larghezza finestra, altezza finestra, modalità fullscreen on/off, nome finestra)
    while(App.RetmDevice()->run())
    {
        App.RetmDriver()->beginScene(true, true, SColor(255,0,0,0));
        App.RetmSceneMgr()->drawAll();
        App.RetmDriver()->endScene();
    }
    return 0;
}


Analizziamo un attimo:

Classe Inizializza:
  • Le variabili sono tutte private, per richiamarli ho creato un metodo apposta per ogni variabile: RetNomeVariabile()
    Ad esempio RetmSceneMgr() per utilizzare lo scene manager al di fuori dalla classe Inizializza.
    E' consigliabile dichiarare tutte le variabili private e richiamarle come ti ho fatto vedere.
  • Ho creato un metodo per gestire gli errori: Errore(LPCWSTR nomeErrore)
    Questo metodo fa apparire una message box con scritto il nome dell'errore.
    Esempio: Errore(L"mDevice"); farà apparire una messagebox con scritto "Errore" nel titolo e "mDevice" come frase (in questo modo capisci che c'è un errore in mDevice).
  • Un metodo per ogni cosa: device, scene manager, video driver e in futuro altro.

main:
  • Si definiscono gli oggetti, per adesso solo per la classe Inizializza (i parametri sono: larghezza scermo, altezza schermo, fullscreen on/of, nome finestra, poi stà a te decidere se togliere o aggiungere roba (tipo se usare opengl o directx, ecc...)
  • Main loop contenente tutte le cose da fare in ciclo (ho preferito metterlo nel main piuttosto che nella classe Inizializza)


Per adesso appare solo una finestra nera. Quando capisci il funzionamento passo a caricare la mappa e via dicendo.
(il programma lo stò facendo di pari passo con quello che ti spiego, quindi è molto probabile che sarà da ritoccare più e più volte)

Come esercizio per vedere se hai capito più o meno come impostare il programma prova a creare una variabile contenente gli fps.
La variabile dev'essere dichiarata privata in Inizializza e si dev'essere in continua variazione (si deve aggiornare ogni volta).
Per avere gli fps ( http://irrlicht.sourceforge.net/docu/cla...2fa408af13 ) se fosse in Inizializza dovresti fare mDevice->getFPS();

Se c'è qualcosa che non hai ben capito o hai qualche problema dimmi pure.
 
Reply
#9
mamma mia steve fai paura O.O
 
Reply
#10
e basta ot vedi spam da tutte le parti compreso il mio <.< comunque a steve dovrebbero dargli il premio nobel xD mmh comunque se tu dici endscene quella si ferma e in teoria la telecamera non si muove più oppure si resetta al movimento delle freccie non ho capito bene xD (ANCHE SE LE FRECCIE SONO DA INCLUDERE DOPO SCUSA IL CAPS MA CI è ANDATO DA SOLO <,<)
 
Reply
#11
Dimenticavo.... il #pragma once credo che esista solo in visual studio (mi pare che evita problemi se includi più volte lo stesso include).

Nel main loop per adesso abbiamo:

beginscene(...) : fa parte del video driver, l'applicazione deve chiamare questo metodo prima di ogni rendering (reference)
drawall() : fa parte dello scene manager, disegna tutti gli scene node (reference)
endscene() : fa parte del video driver, stampa l'immagine renderizzata a schermo (reference)

Per capire un pò meglio il drawall() vi dico che lo scene manager è l'oggetto (nel senso oop) che contiene e gestisce tutti gli scene node.
Uno scene node è un oggetto che contiene e gestisce le mesh e gli sprite (la roba in 2d e 3d se preferite xD), un oggetto (nel senso di grafica) per ogni scene node.


Se qualcuno ha intenzione di impararsi irrlicht a stò punto conviene che si faccia avanti ora (anche con un progetto un pò diverso da quello di puorcunicu). Certo non so quasi niente di irrlicht, però quasi niente è meglio di niente.
 
Reply
#12
(18-10-2010, 05:18 PM)puorcunicu Ha scritto: 1. come posso fare una camera a scorrimento 2d che vada a destra o a sinistra, a secondo di dove vada il personaggio

Non sarò un esperto di irricht ma ti rispondo secondo le mie conoscenze su dark basic. Non basterebbe avere una posizione Z fissa della cinepresa e invece come coordinate x e y uguali a quelli dell'oggetto in movimento?

Esempio: Posizione personaggio 300,200,0
Posizione cinepresa 300,200,(Posizione Z del personaggio)+100
 
Reply
#13
(21-10-2010, 07:54 AM)Jonathan Archer Ha scritto:
(18-10-2010, 05:18 PM)puorcunicu Ha scritto: 1. come posso fare una camera a scorrimento 2d che vada a destra o a sinistra, a secondo di dove vada il personaggio

Non sarò un esperto di irricht ma ti rispondo secondo le mie conoscenze su dark basic. Non basterebbe avere una posizione Z fissa della cinepresa e invece come coordinate x e y uguali a quelli dell'oggetto in movimento?

Esempio: Posizione personaggio 300,200,0
Posizione cinepresa 300,200,(Posizione Z del personaggio)+100

A dire il vero è ancora più facile.
Irrlicht utilizza un sistema di nodi gerarchico.

es.
Creo due nodi: nodo_personaggio e nodo_camera (figlio di nodo personaggio)
Muovendo il nodo personaggio muovo anche il nodo camera, ma muovendo muovo camera non muovo il nodo personaggio.
 
Reply
#14
Come se collegassi la cinepresa al personaggio ma non il personaggio alla cinepresa mi pare di aver capito... Smile
 
Reply
#15
quanto siete contorti comunque ora ho capito anche io u.u
 
Reply
#16
Steve l'ha spiegato in modo contorto ma l'importante è capire xD
 
Reply
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Irrlicht Engine Chip 9 3,137 01-11-2016, 12:48 AM
Ultimo messaggio: Chip
  Problema camera irrlicht Master Gabriel 12 3,236 18-12-2014, 09:40 AM
Ultimo messaggio: Master Gabriel
  Irrlicht Engine Info e Download friskon 12 7,060 12-04-2013, 11:25 AM
Ultimo messaggio: war10hacker
Question Problema irrlicht con directx Zettamax 0 1,910 23-02-2012, 06:49 PM
Ultimo messaggio: Zettamax
  [TUTORIAL] Irrlicht - Primo Approccio ManHunter 5 3,744 02-01-2012, 07:16 PM
Ultimo messaggio: steve
  [Irrlicht.net] Tutorial 1 - Tradotto Riddick 2 2,327 05-05-2011, 01:02 AM
Ultimo messaggio: ManHunter
  Irrlicht.Net Riddick 8 3,072 10-02-2011, 12:59 AM
Ultimo messaggio: Riddick
  Prima prova con irrlicht steve 4 2,263 10-07-2010, 08:31 PM
Ultimo messaggio: Riddick
  Download dei tool free e guide per Irrlicht Riddick 2 2,036 03-06-2010, 08:48 PM
Ultimo messaggio: Riddick
  Installare Irrlicht su: Dev-C++ e Code::Bocks Riddick 9 4,402 03-06-2010, 02:48 PM
Ultimo messaggio: Riddick

Vai al forum:


Browsing: 1 Ospite(i)