SOFTWARE > Linguaggi di programmazione e scripting

Creazione di un videogame di Biliardo multipiattaforma

<< < (2/12) > >>

schiumacal:
Per Amiga intendo tutti gli Amiga, sopratutto il classic.
Se verra' introdotto un plugin OpenGL per Hollywood, non ci sara' nessun problema a convertire il gioco anche per Amiga, e siccome Hollywood compila sia per Amiga Classic che NG, tutto sara' OK. Naturalmente le OpenGL implementate su Hollywood dovranno essere uguali alle vere OpenGL, e non limitate oppure peggio ancora demo poco funzionanti e piene di bug.

Per la fisica, invece, e' mia intenzione crearla il piu' verosimile possibile.

In questi giorni sto' studiando precedenti giochi di biliardo realizzati nei modi piu' disparati possibili. Il migliore che abbia mai visto fino ad ora "Cue Club"... bel giochillo, direi!!!

Amig4be:
Ok ;)

Su ps3 mi ero divertito molto con questo
https://youtu.be/5GYAUsLv5B8
I replay sono impressionanti...

Li mi era venuta voglia di farci qualche esperimento.

TheKaneB:
Su Amiga classic non avrai mai OpenGL completo, non sulle macchine lisce per lo meno.
Ma anche le versioni amigaos4 e morphos sono implementazioni ridotte. L'unico ad avere OpenGL completo è AROS credo

Z80Fan:
@schiumacal:

Dato che ho esperienza con le tecnologie che hai menzionato, ti fornisco un po' di informazioni in modo che puoi attuare una scelta ben ponderata:


--- Citazione da: schiumacal - 17 Marzo 2015, 19:24:55 ---La scelta del 3d e' obbligatoria perche' vorrei utilizzare le OpenGL per tutta la gestione della fisica,
--- Termina citazione ---
Gestione della fisica ≠ rendering: ci possono essere giochi con simulazione fisica estremamente dettagliata ma con grafica 2D; OpenGL in questo caso non ti semplifica/complica nulla.


--- Citazione da: schiumacal - 17 Marzo 2015, 19:24:55 ---in particolar modo il rotolamento delle biglie sul tavolo dovra' essere perfettamente realistico, cosa che diventa impensabile realizzare con grafica 2d e implementazione di sprite.
--- Termina citazione ---

Contrariamente a quanto uno potrebbe pensare, la miglior tecnica per disegnare sfere e/o oggetti è proprio usare sprite 2D: questo perchè, in API come OpenGL, il rendering è necessariamente a linee e triangoli, e per fare un cerchio con decente approssimazione è necessario disegnare un poligono con un elevato numero di lati, aggiungendo carico sulla GPU (in realtà, nel tuo caso di dover disegnare una ventina di sfere, il problema è molto ridotto, ma comunque presente).

La tecnica preferita per ovviare a questo problema (e usata anche in motori AAA) è quella degli impostors, che effettivamente sono degli sprite 2D che (come dice il nome) "ingannano" l'osservatore facendo sembrare di avere un modello 3D estremamente dettagliato, ma in realtà è solo un'immagine bidimensionale disegnata con pochissimi poligoni.

Puoi farti un'idea di questa tecnica QUI e QUI, però in sostanza l'idea è che tu disegnerai solamente un quadrato sullo schermo (per ogni palla del biliardo), e nel fragment shader farai in modo da non disegnare tutti i pixel che distano R pixel dal centro del quadrato; questo effettivamente disegnerà un cerchio di raggio R pixel. Per tutti i pixel che passano il test, puoi quindi colorarli con il colore appropriato per la palla, disegnare luci/riflessi, e aggiungere la texture per disegnare il numero della palla.



--- Citazione da: schiumacal - 17 Marzo 2015, 19:24:55 ---Inoltre OpenGL oggi sono un sistema stabile e totalmente multipiattaforma, valide anche su smartphone in versione ridotta, quindi ottimo. :-)

--- Termina citazione ---

Questo (purtroppo), è quasi completamente falso.
Prima di tutto, prendiamo il caso di desktop vs. smartphone: i primi usano OpenGL liscia (versioni da 1.0 a 4.5 attualmente), mentre nel campo mobile c'è praticamente solo disponibile OpenGL ES (Embedded Systems, versioni da 1.0 a 3.1 attualmente).
OpenGL e OpenGL ES (che per comodità chiamerò GL e ES), sono praticamente due API diverse, nonostante abbiano lo stesso nome e per la maggior parte delle funzioni usino gli stessi termini e le stesse chiamate a funzione. Tipicamente, quindi, un programma scritto in GL non necessariamente funzionerà in ES e viceversa; se non erro, solo programmi scritti in GL 4.0+ e ES 3.0+ sono parzialmente compatibili con la rispettiva opposta API.
Oltretutto (sempre sul discorso di mantenere la compatibilità), dovresti usare GL in modalità "Core" invece che "Compatibility": queste due modalità sono state introdotte in GL 3.0, e servono per disattivare l'utilizzo delle funzioni deprecate di GL 1.0-2.0 (Core) oppure mantenerle (Compatibility). ES non è compatibile con le funzioni di GL 1.0-2.0, quindi per assicurarti di poter in futuro portare la tua applicazione a ES, dovresti usare almeno GL 3.0+ Core (oppure sviluppare direttamente in ES 3.0+, ma dubito che i driver per le GPU desktop forniscano supporto a tale API).

Secondo, anche il fatto che sia "stabile" è falso: a causa della storica mancanza di una batteria di test per verificare la corretta implementazione, ogni implementazione di ogni produttore (Nvidia, AMD, Intel, ARM, Imagination etc) è un pelo diversa dalle altre e ha delle peculiarità tutte sue che talvolta costringono i programmatori a girare intorno a questi problemi caso-per-caso.
Questa seconda parte per te non è così grave, sopratutto perchè hai bisogno di usare solo le funzioni più comunemente usate, e quindi è difficile che troverai strani problemi particolari a una determinata piattaforma. In qualsiasi caso, se vuoi assicurarti che il tuo programma funzioni correttamente su vari dispositivi, l'unica soluzione è procurarsi i dispositivi e testare.


TL;DR, se vuoi usare OpenGL e poter portare il tuo software sul maggior numero di piattaforme con il minor sforzo, segui queste indicazioni generali:

* Usa SDL 2.0: OpenGL è un'API che indica funzioni per disegnare, ma non ha nessun modo per fare tutte quelle operazioni di inizializzazione e gestione come aprire una finestra, impostare la risoluzione, prendere gli eventi da mouse e tastiera etc; queste cose sono tutte dipendenti dalla piattaforma. SDL è una libreria che si preoccupa di gestire tutti questi dettagli, e ti fornisce anche qualche funzione aggiuntiva come la gestione dell'audio. (Questa libreria è principalmente per C e C++, anche se ci sono tantissimi wrapper per altri linguaggi, ma visto che intendevi usare Qt, immagino siano quelli i linguaggi su cui punti. Per Holliwood non so.)
* Usa OpenGL 3.0+ "Core": lascia perdere OpenGL 1.0-2.0 e tutte le relative guide e tutorial, quelle funzioni (benchè semplici da usare in quanto necessitano di meno setup per funzionare) sono deprecate e ti daranno problemi se in futuro vorrai portare l'applicazione su dispositivi ES. L'unico problema che potresti avere è proprio per Amiga NG: è molto probabile che, se mai arriverà OpenGL su tale piattaforma, sarà OpenGL 1.0-2.0; l'unico mio consiglio è di progettare il tuo programma in modo che tutto il rendering sia completamente separato dalla fisica e dal gameplay (mettendo il rendering in un suo oggetto ad esempio), così potrai eventualmente scrivere un motore di rendering 2D per i sistemi limitati che non supportano OpenGL.
* Considera di rimanere in 2D: a meno che non vuoi fare una telecamera che si muove nello spazio per avere varie visuali o effetti speciali, usare OpenGL (normale o ES che sia) è come sparare a una mosca con un cannone: SDL 2.0 liscio ti permette già da solo di fare tantissime cose, e dietro le quinte, se vede che la piattaforma supporta l'accelerazione hardware, la userà senza che tu debba fare nulla.

devil78:
Meraviglioso.... se cerchi musiche  hai un malato che le crea anche mod s3m it. Batti un colpo  se serve.

Navigazione

[0] Indice dei post

[#] Pagina successiva

[*] Pagina precedente

Vai alla versione completa