Autore Topic: guida opengl - Alcuni chiarimenti  (Letto 1747 volte)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
guida opengl - Alcuni chiarimenti
« il: 05 Agosto 2009, 15:44:13 »
Mi riferisco ad fsurfing e spero che la risposta risulti utile ad altri:

a pagina 4 della tua guida fai riferimento ad un blocco di codice che dovrebbe essere inserito in una funzione ch eperò non esiste. O meglio la chiudi ma non l apri...mi riferisco in particolare a questa parte:

Citazione

'Il compito della prossima sezione di codice è di ridimensionare la scena OpenGL ogni volta che la
' finestra (dando per scontato che state utilizzando una finestra piuttosto che la modalità fullscreen)
' viene ridimensionata. Persino se non c'è la possibilità di ridimensionare la finestra (per esempio, si
' è in modalità fullscreen), questa routine verrà chiamata almeno una volta quando il programma
' parte per settare la visuale prospettica. La scena OpenGL verrà ridimensionata basandosi sulla
' larghezza e l'altezza della finestra in cui viene visualizzata.
'Definiamo due variabili , ratio che indica il rapporto tra larghezza e l' altezza della finestra e
'Height che indica l' altezza della stessa
DIM ratio AS Float
DIM Height AS Integer
  Height = Screen.Height
  IF Height = 0 THEN Height = 1
  ratio = Screen.Width / Height
Gl.Viewport(0, 0, Screen.Width, Screen.Height)
'Le linee seguenti impostano lo schermo per una visuale prospettica. Ciò significa che le cose più
' sono distanti più diventano piccole. Questo crea una scena dall'aspetto realistico. La prospettiva
' viene calcolata con un angolo di osservazione di 45° basato sull'altezza e la larghezza della
' finestra. 0.1, 100.0 sono il punto di partenza e di arrivo di quanto in profondità è possibile
' disegnare nello schermo.
         Gl.MatrixMode(gl.GL_PROJECTION)
         Gl.LoadIdentity()
         Glu.Perspective(45.0, ratio, 0.1, 100.0)
'glMatrixMode(GL_PROJECTION) indica che le 2 linee successive del codice influiranno sulla
' matrice di proiezione. La matrice prospettica si occupa di aggiungere la prospettiva alla nostra
' scena. glLoadIdentity() è simile ad un reset. Ripristina lo stato di partenza nella matrice
' selezionata. Dopo che glLoadIdentity() è stata chiamata, staabiliamo la visuale prospettica per la
' scena. glMatrixMode(GL_MODELVIEW) indica che ogni nuova trasformazione influirà sulla
' matrice di visualizzazione del modello. La matrice di visualizzazione del modello è dove vengono
' memorizzate le informazioni riguardanti il nostro oggetto. Infine azzeriamo la matrice di
' visualizzazione del modello. Non preoccupatevi se non capite questa parte, la rispiegherò in un
' altro tutorial. Sappiate solo che questo DEVE essere fatto per una buona scena prospettica.
         Gl.MatrixMode(gl.GL_MODELVIEW)
         GL.LoadIdentity()
'ed infine chiudiamo la funzionerà
END

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: guida opengl - Alcuni chiarimenti
« Risposta #1 il: 05 Agosto 2009, 16:04:33 »
si ma tu da buon studente di informatica dovresti aver capito che la funzione era:

public sub screen_resize()

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: guida opengl - Alcuni chiarimenti
« Risposta #2 il: 05 Agosto 2009, 16:24:07 »
Io l'ho chiamata resize()...

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: guida opengl - Alcuni chiarimenti
« Risposta #3 il: 05 Agosto 2009, 16:39:38 »
è possibile che la mia scheda video non mi permette di visualizzare perfettamente le forme?

Se disegno una sola forma alla volte le vede ma se aggiungo Gl.traslatef la figura esce dal form anche se seguo passo la tua guida...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: guida opengl - Alcuni chiarimenti
« Risposta #4 il: 05 Agosto 2009, 19:51:10 »
è più probabile che trasli il tutto fuori dalla visuale

ricordati che dopo un rotate cambiano le coordinate di riferimento percui con un traslate è probaile che tu di muova su un asse diverso da quello che tu credi.

se non ricordo male con load identity (o qualcosa di simile ) prima del traslate ripristini la posizione originale

per curiosità a che lezione ti riferisci?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: guida opengl - Alcuni chiarimenti
« Risposta #5 il: 06 Agosto 2009, 00:55:42 »
Sai, penso che sia improbabile che sia il codice ad essere sbagliato perchè ho copiato passo quello che hai scritto tu....mi riferisco alla lezione per disegnare un semplice triangolo e quadrato...

un altra cosa: quando avvio il programma mi dice per Gl.Perspective che perspective è un oggetto non identificato per gl....infatti se scrivo Gl. tra le opzioni suggerite quella non compare proprio...ma non compare neanche una simile e perciò non penso sia un tuo errore di battitura...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: guida opengl - Alcuni chiarimenti
« Risposta #6 il: 06 Agosto 2009, 13:02:07 »
potrebbe essere glu.perspective()

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: guida opengl - Alcuni chiarimenti
« Risposta #7 il: 06 Agosto 2009, 14:17:47 »
ah...caspita era proprio quello il problema...ecco perchè non vedevo le forme...

Ti consiglio di correggere anche la guida però man mano che spuntano questi errori o se vuoi mi mandi il file gli correggo io se non ti va...


ok...ora le vedo e sono dove devono essere però ho un problema:invece che essere belle bianche cono fatte a puntini...uno schifo!!!

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: guida opengl - Alcuni chiarimenti
« Risposta #8 il: 06 Agosto 2009, 19:25:27 »
il file della guida era corretto

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: guida opengl - Alcuni chiarimenti
« Risposta #9 il: 06 Agosto 2009, 23:40:36 »
Per quantio riguarda le forme cos'hai da dirmi?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: guida opengl - Alcuni chiarimenti
« Risposta #10 il: 07 Agosto 2009, 00:11:18 »
che intendi con le forme?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: guida opengl - Alcuni chiarimenti
« Risposta #11 il: 07 Agosto 2009, 00:54:24 »
Perchè le mie forme non sono belle bianche ma solo piene di puntini bianchi?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: guida opengl - Alcuni chiarimenti
« Risposta #12 il: 07 Agosto 2009, 11:45:58 »
probabilmente hai commesso  qualche errore di copiatura...il codice del modulo Mmain è questo:
Codice: [Seleziona]

' Gambas module file

PRIVATE CONST ScrWidth AS Integer = 640
PRIVATE CONST ScrHeight AS Integer = 480
PRIVATE Screen AS NEW Window(TRUE) AS "Screen"


PUBLIC SUB Main()




  screen.Width = ScrWidth
  screen.Height = ScrHeight



  Screen.show()



Screen.Border = Screen.Resizable

 

InitGL()


END



PUBLIC SUB InitGL()


 Gl.ShadeModel(gl.GL_SMOOTH)

Gl.ClearColor(0.0, 0.0, 0.0, 1.0)
Gl.Clear(gl.GL_COLOR_BUFFER_BIT AND gl.GL_DEPTH_BUFFER_BIT)
 


 
Gl.ClearDepth(1.0)
Gl.Enable(gl.GL_DEPTH_TEST)
Gl.DepthFunc(gl.GL_LEQUAL)



Gl.Hint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_NICEST)


END


PUBLIC SUB screen_resize()
DIM ratio AS Float
DIM Height AS Integer

  Height = Screen.Height

  IF Height = 0 THEN Height = 1

  ratio = Screen.Width / Height

Gl.Viewport(0, 0, Screen.Width, Screen.Height)        


  Gl.MatrixMode(gl.GL_PROJECTION)
  Gl.LoadIdentity()
  Glu.Perspective(45.0, ratio, 0.1, 100.0)



  Gl.MatrixMode(gl.GL_MODELVIEW)
  GL.LoadIdentity()


END


PUBLIC SUB Screen_draw()


    gl.ClearColor(0, 0, 0, 1)
  Gl.Clear(gl.GL_COLOR_BUFFER_BIT AND gl.GL_DEPTH_BUFFER_BIT)
 
  Gl.LoadIdentity()


  Gl.Translatef(-1.5, 0.0, -6.0)
 

   gl.Begin(gl.GL_TRIANGLES)
            gl.Vertex3f(0.0, 1.0, 0.0)
            gl.Vertex3f(-1.0, -1.0, 0.0)
            gl.Vertex3f(1.0, -1.0, 0.0)
     gl.End
 
         

         
     Gl.Translatef(3.0, 0.0, 0.0)


         
   gl.Begin(gl.GL_QUADS)
            gl.Vertex3f(-1.0, 1.0, 0.0)
             gl.Vertex3f(1.0, 1.0, 0.0)
             gl.Vertex3f(1.0, -1.0, 0.0)
             gl.Vertex3f(-1.0, -1.0, 0.0)
   gl.End  


  WAIT 0.01
END

   

PUBLIC SUB Screen_keyPress()

  IF key.Code = key.F1 THEN Screen.Fullscreen = NOT Screen.Fullscreen
  IF key.Code = key.Esc THEN Screen.Close()

END
 

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: guida opengl - Alcuni chiarimenti
« Risposta #13 il: 07 Agosto 2009, 12:29:27 »
No, mi dispiace...non è un errore mio...anche col tuo codice la cosa è la stessa...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: guida opengl - Alcuni chiarimenti
« Risposta #14 il: 07 Agosto 2009, 13:04:01 »
a me quel codice funziona correttamente