Gambas-it
Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: md9327 - 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...
-
Interessantissimo .....
Sarebbero utili però maggiori commenti secondo me , sulle singole opezazioni che fai ...... hai fatto 30 ....
-
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
-
Non puoi man mano scrivere qualcosina sul wiki per favore? Così sei un pò avanti col lavoro...Qualsiasi cosa va bene...
-
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
-
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 ...
-
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)
-
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?
-
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.
-
ok .... son ignorante in materia .... provo .....
-
(e qui dovrai indicare vertice per vertice tutti i punti che lo compongono)
intendevo dire che si dovrà indicare tutti i vertici
-
forse ho risolto il problema delle chiamate di disegno esterne al metodo gl_draw
-
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!
-
In area download ho inviato la nuova versione degli esempi, che spero leo renderà visibile prima possibile (grazie leo!).
-
Ehm... sul server non è arrivato nulla.... Potresti rispedirlo?
-
Provvedo, e comunque lo posto anche qui, semmai ci pensi tu. Ok?
P.S.: ho tentato, ma mi ritorna errore sul tipo di file. Hai per caso modificato qualcosa? Il file, come vedi è un tar.gz, e mi sembra che fino a qualche tempo fà era bene accetto.
-
Non è ancora arrivato nulla...
P.S.:
sarebbe meglio lo inviassi tu in area download. Se lo faccio io, poi resta registrato a mio nome.
-
A me non importa, ma dovresti dirmi che tipo di estensione vuole, per poterlo inviare. Quella che ho usato non gli piace proprio, e ci ho provato una decina di volte...
-
ci sono scritte sotto le estensioni che vuole....un tar.gz va bene..
-
A quanto pare no, ho rifatto l'upload inviando un zip e gli è piaciuto.
-
Forse mi ero espresso male ieri riguardo agli spostamenti.....
Intendevo dire :
Nell'esempio individui un oggetto già disegnato paragonando x,height e width di ogni oggetto con la posizione del puntatore.... perfetto per una figura quadrata o rettangolare .....
Se io voglio selezionare un oggetto irregolare come faccio ? basta una semplicissima linea inclinata per aver un sacco di problemi =P...
Mi vien in mente, come dicevo, di memorizzare tutti i punti utilizzati in ogni singolo disegno e associarli a un oggetto ....
Sbaglio ??
-
Si, devi salvarti tutte le coordinate, e per questo basta un array.
Nel mio esempio, per esempio :-) , ho usato solo rettangoli, perchè era solo un esempio...
Nel casi di oggetti complessi, è ovvio che devo crearmi classi ad-hoc, e in base al tipo di classe, determinare la posizione di ogni punto e dell'area che circoscrivono.
-
Per voi geniacci
http://www.disi.unige.it/person/MagilloP/GRAFICA03/lezione6.html
Pesnso sia il metodo per evitare di memorizzare pixel per pixel ....
-
Bravo!
Ci studio sopra...