Autore Topic: Esempi OpenGL  (Letto 3302 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Esempi OpenGL
« il: 02 Marzo 2009, 19:09:36 »
Mi sono dedicato un poco allo studio delle librerie Gambas per OpenGL.

Dopo vari scervellamenti sul tema, ho iniziato a scrivere qualche esempio sull'uso di questa libreria.

Il progettino in allegato mostra qualche funzionalità di base di OpenGL, ed è costruita pensando un ad una futura implementazione in pgDesigner.

Nel codice sono state inserite anche alcune strutture di linguaggio, che uso spesso nei miei programmi Gambas, e che possono aiutare i neofiti sull'uso di certi concetti sull'utilizzo dei comandi e dei controlli di Gambas.

Spero di fare cosa gradita.

Per il momento ho trovato molte lacune sul come l'accoppiata OpenGL/Gambas interpreta certe funzioni, e ho l'impressione che alcune cose sono ancora lontane dall'essere completamente funzionanti.
Una cosa che ho notato, è l'alta variabilità del funzionamento in certe condizioni, in particolar modo sul perchè a volte funziona, e spesso no, se alcune parti di istruzioni OpenGL vengono eseguite, utilizzando metodi separati, cosa abbastanza normale in una logica ad oggetti...

  • Visitatore
Re: Esempi OpenGL
« Risposta #1 il: 03 Marzo 2009, 15:18:22 »
Interessantissimo .....
Sarebbero utili però maggiori commenti secondo me , sulle singole opezazioni che fai ...... hai fatto 30 ....

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #2 il: 03 Marzo 2009, 18:36:50 »
Hai ragione anche tu, ma al momento il mio interesse era il farlo funzionare, e non è stata cosa semplice.

La documentazione è piuttosto pesante, almeno per quanto ho letto in giro per la rete, e quella di Gambas è praticamente zero.
I miei sono dei tentativi che, peraltro, hanno evidenziato qualche lacuna, che spero di riuscire a risolvere; fatto questo, sicuramente cercherò di spiegare meglio i concetti applicati nell'esempio.
Il fatto di aver pubblicato questo esempio, è stati più per iniziare a far vedere cosa si potrebbe fare con OpenGL/Gambas, però mi manca ancora qualcosa sui concetti di base...

Una delle cose strane che non riesco a capire, è il perchè un oggetto non può essere disegnato da un metodo esterno all'evento Draw della classe GLarea; ho fatto parecchi tentativi con vari porting presi da esempi in C++, ma anche se funzionano in C++, non vanno in Gambas.
Come vedi, mi manca qualche cosa sui concetti base, sempre che non siano dovuti a problemi nell'integrazione in Gambas, nel qual caso avrò di che penare...

Comunque, la prossima volta, cercherò di documentare di più...

Riguardo alle classi Gl e Glu di Gambas, ho notato che manca qualcosa riguardo alla possibilità di creare stringhe di testo. In verità, ho visto che in tutti gli esempio letti in rete, questa possibilità la fornisce la libreria "glut", che non conosco, ma sembra che si metta a cappello su quelle base, costruendo alcune funzioni più evolute, compreso il disegno di testi.

Bye

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Esempi OpenGL
« Risposta #3 il: 03 Marzo 2009, 18:54:50 »
Non puoi man mano scrivere qualcosina sul wiki per favore? Così sei un pò avanti col lavoro...Qualsiasi cosa va bene...

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #4 il: 03 Marzo 2009, 23:58:00 »
Diciamo che attualmente ho poco tempo, e quel poco al momento lo stò impiegando per le prove e le ricerche (leggere doc, ecc.).

Sicuramente l'idea è quella, ma lo farò solo quando sarò certo di non scrivere idiozie...

Ho comunque visto che, nell'area download, fsurfing ha inserito un documentino niente male, segno che ha anche lui fatto una bella ricerca sul tema. Io ho iniziato da poco, e al momento non mi pare ancora il caso di scrivere qualcosa...

L'idea mi aveva stuzziato già da parecchio tempo, in particolare da quando ho iniziato a fare i primi test per pgDesigner, ma avevo notato una certa difficoltà a capire l'OpenGL, ma dopotutto c'è solo bisogno di una certa pazienza e tempo.

Dai, prima o poi scrivo qualcosina...

Comunque, dietro tuo suggerimento, ho iniziato a mettere qualche nota pià prolissa nel codice, sperando che si capisca; a breve riposto i sorgenti...

Bye

  • Visitatore
Re: Esempi OpenGL
« Risposta #5 il: 04 Marzo 2009, 12:26:49 »
Avevo provato a dare un'occhiata all'esempio gears , ma dopo una mezzora durante la quale aveva iniziato a uscirmi fumo dalle orecchie ho rinunciato ...
Secondo me il tuo esempio andrebbe messo fra quelli ufficiali ....

Ma se io dovessi spostare piuttosto che un quadrato una forma irregolare devo crearmi una collection con all'interno le coordinate di tutti i singoli punti associate all'oggetto ?? con il quadrato è semplice ma altrimenti è molto gravoso ...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #6 il: 04 Marzo 2009, 12:45:26 »
Citazione
Ma se io dovessi spostare piuttosto che un quadrato una forma irregolare devo crearmi una collection con all'interno le coordinate di tutti i singoli punti associate all'oggetto ?? con il quadrato è semplice ma altrimenti è molto gravoso ...


nell esenpio gambasgears cè una cosa molto importante che vale la pena di studiare:

  Gl.NewList(gearlists, Gl.GL_COMPILE)

in pratica se si ha un oggetto complesso lo si definisce in una callList (e qui dovrai indicare vertice per vertice tutti i punti che lo compongono)
al momento del disegno lo richiami con

 Gl.CallList(gearlists)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #7 il: 04 Marzo 2009, 13:43:16 »
Oltre a questo, è possibile definire un poligono, composto da indefiniti punti (oltre i quattro del quadrato, o i tre del rettangolo), per cui la cosa non è così complicata, perchè è sufficiente aggiungere le istruzioni per ogni singolo vertice del poligono.

Riguardo alla NewList, non mi è ancora ben chiaro il concetto, dato che l'unica cosa che notato, è che ti permette di richiamare, durante il disegno, determinati oggetti definiti nella lista già preparata.
La cosa, al momento, mi è un pò fuori portata, perchè non riesco a far funzionare GLarea, con il richiamo di metodi esterni, contenenti le istruzioni per la creazione di singoli elementi. Questo problema mi stò facendo andare fuori dai gangheri, e la cosa assai più strana è che a volte invece di intravede qualcosa... boh?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Esempi OpenGL
« Risposta #8 il: 04 Marzo 2009, 14:19:08 »
Non conosco openGL ma penso che si basi sull'uso di matrici (che poi sono quelle che definiscono gli spostamenti nello spazio) quindi non penso ci sia bisogno di definire tutti i punti per uno spostamento ma solo i vertici della tua figura. Ovvio che per un quadrato i punti saranno quattro mentre per un triangolo tre e così via.

  • Visitatore
Re: Esempi OpenGL
« Risposta #9 il: 04 Marzo 2009, 14:31:51 »
ok .... son ignorante in materia .... provo .....

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #10 il: 04 Marzo 2009, 18:42:23 »
Citazione
(e qui dovrai indicare vertice per vertice tutti i punti che lo compongono)


intendevo dire che si dovrà indicare tutti i vertici

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #11 il: 04 Marzo 2009, 19:46:49 »
forse ho risolto il problema delle chiamate di disegno esterne al metodo gl_draw

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #12 il: 04 Marzo 2009, 21:50:53 »
Da quello che leggo dal tuo codice, usi il timer per riaggiornare il diagramma.
Avevo fatto anche io questo tentativo, ma è andato male, oltre al fatto di avere un continuo refresh del disegno (anche se non si vede), e un timer sempre attivo.

Comunque ora lo provo e ti dico...

Detto fatto!

Il tuo esempio funziona, e ho provato anche a bloccare gli oggetti in posizioni fisse; il timer fà sì che il diagramma si aggiorni, ma si vede il refresh ogni volta che scrolli l'area (molto fastidioso), e poi si vede che rallenta, rispetto alla stessa immagine senza timer.

Nell'esempio, che ho modificato e che inserisco ora nei download, ho estratto il codice del disegno interamente in una routine esterna, chiamandola da Draw. La cosa funziona, ma la sequenza dei comandi deve comunque rimanere nella stessa funzione.
A dire la verità, la cosa mi potrebbe anche bastare, ma piacerebbe andare a fondo al problema, senza utilizzare accorgimenti tipo timer, ecc.

Comunque, ho come l'impressione che OpenGL, in ambito Gambas, funziona un pò come una sessione, ovvero il blocco deve essere comunque tutto nella stessa zona; al di fuori di questa, si perde qualcosa. Nei miei test, solo il codice incluso nel metodo funziona, le chiamate esterne no!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Esempi OpenGL
« Risposta #13 il: 04 Marzo 2009, 22:29:30 »
In area download ho inviato la nuova versione degli esempi, che spero leo renderà visibile prima possibile (grazie leo!).

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Esempi OpenGL
« Risposta #14 il: 04 Marzo 2009, 22:57:40 »
Ehm... sul server non è arrivato nulla.... Potresti rispedirlo?
Visita il mio sito personale: http://www.leonardomiliani.com