|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2008
Messaggi: 71
|
[C++ - OpenGL] Importare modelli 3D ?
Salve a tutti, avevo intenzione di realizzare un videogioco molto molto essenziale con l'ausilio di C e librerie OpenGL.
Ho già provato a fare piccoli esperimenti con le OpenGL, prendendo degli esempi da un sito ( http://nehe.gamedev.net/ ). Ora non so quanto sia "buona" come fonte, e non so neanche se faccia codice buttato lì senza criterio, però sono riuscito a capirlo ed a creare qualcosa di mio. Quello che vorrei cercare di capire: è possibile realizzare un piccolo gioco di automobili in questo modo ? ( tempo circa 1 mese o 2) Il gioco sarebbe molto semplice, una visuale dall'interno ( dove prendo un modello 3D che simula l'interno dell'auto ) , una "piattaforma" con la pista ed il paesaggio, ed il cielo. Non mi serve qualcosa di realistico, quindi per curvare ad esempio farei semplicemente ruotare il modello dell'auto dall'asse e la telecamera (poi penso siano cose da provare ). Però il mio principale problema è: Come posso fare per importare un modello 3D realizzato con altri software nel programma? Ho cercato come importare un .3ds, ma ho trovato solo software a pagamento... ( Come programma per realizzare i modelli userei Blender ). Sapreste darmi qualche dritta ? E' realizzabile oppure no ? E' tempo buttato ? Grazie mille in anticipo ![]()
__________________
CPU: 3570K - MB: ASRock Z77 Pro4-M VGA: GTX 660 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2003
Città: BG
Messaggi: 10041
|
__________________
Mac mini M1,16GB,2TB,10Gbit;Satechi Hub NVMe;Samsung 990 Pro 4TB;WD My Passport for Mac 4TB / Logitech MX Keys;Logitech MX Vertical;Philips 288E2A;PreSonus Eris E3.5;HP LaserJet Pro M281fdw / QNAP TVS-871-i3-4G,8GB,8x WD Red CMR 6TB raid 6,QNAP QXG-2G1T-I225 / TP-LINK Archer GE800;QNAP QSW-1105-5T / iPhone 14 Pro Max 1TB;iPad mini 6 256GB;Apple Watch Ultra 2;AirPods Pro 2;Kindle Paperwhite 11 SE / LG OLED C2 48";Apple TV 4K 2021 64GB;Denon AVR-X2800H / Xbox Series X;Seagate Expansion Card 2TB |
![]() |
![]() |
![]() |
#3 |
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
E' pieno di risorse in rete su come importare modelli 3d di qualsiasi specie in opengl. Alla fine un file contenente un modello 3d non contiene altro che vertici, normali, coordinate delle texture etc. Devi solo capire come è fatto il formato che ti interessa e scrivere il codice è banale......
Se ho un attimo provo ad aiutarti nella ricerca. Comunque ti sconsiglio di utilizzare opengl per questo genere di progetti, rischi di perdere un sacco di tempo. Molto meglio le directX, in directX importare un modello è cosa banale. Anche utilizzare una librerie come Ogre non è male come idea. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
se é realizzabile o se é tempo buttato dipende solo da te: quanto sei bravo con la grafica 3D? e quanto sei bravo a programmare? creare un videogame é il sogno di moltissimi programmatori, ma la stragrande maggioranza di essi fallisce quando si rende conto che, anche se per loro scrivere codice é gratis per quanto lo fanno bene, l'artwork non sanno proprio dove andare a pescarlo.
comunque, venendo al problema principale: il formato Wavefront é documentato pubblicamente, piuttosto semplice da interpretare, ed é supportato da molti programmi di grafica 3D tra cui anche Blender. ecco le specifiche: http://local.wasp.uwa.edu.au/~pbourke/dataformats/obj/ http://local.wasp.uwa.edu.au/~pbourke/dataformats/mtl/ il formato ti permette di memorizzare le mesh comprensive di vettori normali e texture coordinates e anche le informazioni sui materiali, comprensive di texture e colori vari. (per le informazioni sul materiale vedi il secondo link, i materiali si mettono in un file a parte) purtroppo con questo formato non ti é possibile memorizzare animazioni, quindi o lasci i tuoi oggetti completamente statici oppure provvedi ad animarli con altri mezzi. ultima questione: i tutorial di NeHe ormai sono vecchi, usano quasi tutti la cosiddetta fixed-function pipeline; oggi la fixed-function pipeline non si usa piu, si programma a shaders. il problema di OpenGL é che é scarsamente documentato, se inizi adesso a studiare ci metterai una vita ad imparare ad usarlo in maniera ortodossa. forse faresti meglio a seguire il consiglio che ti é giá stato dato, cioé usare DirectX, al quale rilancio addirittura con XNA. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Oct 2008
Messaggi: 71
|
Grazie a tutti per le risposte, terrò sicuramente in considerazione i vostri consigli.
Riguardo l'utilizzare Ogre3D dovrei provarlo e vedere come mi trovo; ho trovato anche un altro motore che si chiama Irrlicht che sembra molto cononsciuto. Invece per quanto riguarda XNA e DirectX dite che da questo sito potrei ricavarci qualcosa http://www.wilez.it/tutorials/XNA/ ? ( saltando ovviamente tutte le parti dove spiega la programmazione pura ) Utilizzando queste 2 risorse posso importare file con modelli 3D in modo semplice ad esempio tramite funzioni preimpostate? Del tipo : < import("i.3ds",x=12,y=0,z=1); > ? E per il fatto del "realizzabile o no" mi interessava saperlo perché vorrei portarlo all'esame di maturità di perito informatico. Dato che i tempi stringono devo decidermi in fretta. Grazie ancora per le risposte ![]()
__________________
CPU: 3570K - MB: ASRock Z77 Pro4-M VGA: GTX 660 |
![]() |
![]() |
![]() |
#6 |
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Irrlicht non è un granchè, ogre è più completo ma più complesso.
Le directX ti permettono di importare un modello in maniera banale ma non sono comunque semplici, forse xna è la soluzione migliore. Potresti pure usare un engine come unity, sicuramente è la soluzione migliore per creare qualcosa in breve tempo ma ti lascia poco da programmare, puoi fare quasi tutto in maniera visuale e per il resto usi javascript. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Oct 2008
Messaggi: 71
|
Sinceramente odio Javascript, quindi penso che non prenderò neanche in considerazione quella soluzione, ma grazie lo stesso per l'idea.
Ora avrei bisogno solo di qualche conferma su XNA come scritto nel mio ultimo post prima di valutare. Qualcuno saprebbe rispondermi ? Grazie ![]()
__________________
CPU: 3570K - MB: ASRock Z77 Pro4-M VGA: GTX 660 |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Beh XNA è un wrapper allo stesso livello di DirectX, non è un motore grafico... quindi se vuoi pasticciare a basso livello senza rischi (è managed) vai sul sicuro.
Solo non ti aspettare alcun concetto astratto... Ogre invece è il contrario; è complesso e di alto livello come concetti: implementa materiali, compositors, animazioni, ombre, culling, la gestione delle risorse, tutta roba parecchio cazzuta da farsi a mano partendo da una API. Però è più difficile nella misura che trovi difficile C++. Sinceramente ti consiglio di partire da Ogre, perchè se fai un motore senza prima vedere "come lo fanno i pro" viene un'accozzaglia che rovescia modelli a schermo. Sicuramente si vedrà la macchina, si vedrà il cielo, ma non so quanto ti potrebbe essere utile a lungo termine ![]() @fero86: sinceramente mi sa che vince male usare un formato standard all'inizio (e anche dopo) soprattutto se pensato per il rendering offline... sono enormemente più difficili da leggere, creano importers complessi, ma mancano anche di parecchie features necessarie ad un videogioco come la leggerezza, le animazioni, parametri preconfezionati per gli shaders (Normal, binormal, etc) che poi vanno messi a mano. Dovessi farlo, credo che la soluzione migliore sarebbe fare un bel bitdump dei campi dato della classe Mesh, per poi creare un importer da un qualche altro formato di modellazione... PS: Sui VG il forum che ho in firma ti potrebbe essere utile ![]() Ultima modifica di Tommo : 12-04-2010 alle 19:57. |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Si a un certo punto dovrai per forza scrivere qualcosa che legga un formato esterno... ma il vantaggio viene dalla libertà di avere un formato interno adatto a come lo usi te per i calcoli più comuni, oltre al fatto che l'exporter lo puoi sviluppare come applicazione esterna e non sporca il codice "più importante".
E poi anche se non ci ho mai guardato, ho l'impressione che fare un exporter per Blender in Python sia massicciamente più facile che fare un importer da .lwo in C++... Nel primo caso devi scrivere in un formato semplice di testo (il tuo) a partire da dati in memoria già organizzati (da blender) nel secondo devi organizzare dati in memoria a partire da un formato binario complesso e proprietario. Fai un pò te ![]() PS: con rendering offline intendevo "non realtime", quindi CG. |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Oct 2008
Messaggi: 71
|
Ok grazie per i consigli
![]() ![]() Per Ogre mi pare di aver trovato da qualche parte nel sito un Exporter per trasformare i file di Blender in un formato compatibile con Ogre. Scriverò aggiornamenti o (in caso di problemi più seri e poco inerenti col titolo del post ) un altro thread con " i problemi del momento ". Grazie ancora per l'aiuto ![]()
__________________
CPU: 3570K - MB: ASRock Z77 Pro4-M VGA: GTX 660 |
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Oct 2008
Messaggi: 71
|
Dopo un po' di indecisione e dopo aver passato un po' di tempo a cercare di installare Ogre3D con scarsi risultati, ho scoperto Panda3D. Nonostante non sembri qualcosa di "potente" penso vada benissimo per il mio scopo ( mi pare di aver letto che lo usano in qualche scuola per far prendere confidenza con programmazione e grafica.. ).
Oltretutto sembra anche molto immediato e, soprattutto, sono riuscito ad installarlo senza problemi ![]()
__________________
CPU: 3570K - MB: ASRock Z77 Pro4-M VGA: GTX 660 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:47.