Creare con OpenGL un ambiente virtuale 3D: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
(Creata pagina con "Le risorse di '''OpenGL''' consentono anche di creare ambienti virtuali 3D, come ad esempio delle stanze e altri scenari all'interno dei quali l'osservatore è apparentemente...")
 
Nessun oggetto della modifica
Riga 1: Riga 1:
Le risorse di '''OpenGL''' consentono anche di creare ambienti virtuali 3D, come ad esempio delle stanze e altri scenari all'interno dei quali l'osservatore è apparentemente inserito ed  è in grado di muoversi e di agire.
Le risorse di '''OpenGL''' consentono anche di creare ambienti virtuali 3D, come ad esempio delle stanze e altri scenari all'interno dei quali l'osservatore è apparentemente inserito ed  è in grado di muoversi e di agire.


Di seguito vediamo alcuni esempi di codice:
Di seguito vediamo alcuni esempi di codice.
 
===Codice essenziale per creare una stanza 3D===
Public Sub Form_Open()
  With Me
    .x = 0
    .y = 0
    .W = Screen.AvailableWidth
    .H = Screen.AvailableHeight
    .Arrangement = Arrange.Fill
  End With
End
Public Sub GLArea1_Resize()  <FONT Color=gray>' ''Imposta la proiezione prospettica''</font>
  Dim w As Integer = GLArea1.W
  Dim h As Integer = GLArea1.H
  If h = 0 Then h = 1
  GL.Viewport(0, 0, w, h)
  GL.MatrixMode(GL.PROJECTION)
  GL.LoadIdentity()
  GLU.Perspective(60.0, w / h, 0.1, 100.0)
  GL.MatrixMode(GL.MODELVIEW)
End
Public Sub GLArea1_Draw()  <FONT Color=gray>' ''Disegna la scena fissa (visuale da dentro la stanza)''</font>
  GL.Clear(GL.COLOR_BUFFER_BIT Or GL.DEPTH_BUFFER_BIT)
  GL.Enable(GL.DEPTH_TEST)
<FONT Color=gray>' ''Colore di sfondo:''</font>
  GL.ClearColor(0.2, 0.2, 0.25, 1.0)
<FONT Color=gray>' ''Ripristina la trasformazione base:''</font>
  GL.LoadIdentity()
<FONT Color=gray>' ''Posiziona la scena rispetto all'osservatore.''
' ''L'osservatore è nel punto (0, 0, 0), guardando lungo -Z.''
' ''Qui trasliamo tutto indietro e leggermente in basso:''</font>
  GL.Translatef(0.0, -1.0, -5.0)
<FONT Color=gray>' ''Disegna la stanza:''</font>
  DrawRoom()
  GL.Flush
End
Private Sub DrawRoom()  <FONT Color=gray>' ''Costruisce le pareti e il pavimento della stanza''</font>
<FONT Color=gray>' ''Parete posteriore:''</font>
  GL.Color3f(0.5, 0.5, 0.9)
  GL.Begin(GL.QUADS)
    GL.Vertex3f(-3.0, -2.0, -6.0)
    GL.Vertex3f(3.0, -2.0, -6.0)
    GL.Vertex3f(3.0, 2.0, -6.0)
    GL.Vertex3f(-3.0, 2.0, -6.0)
  GL.End
<FONT Color=gray>' ''Parete destra:''</font>
  GL.Color3f(0.6, 0.4, 0.4)
  GL.Begin(GL.QUADS)
    GL.Vertex3f(3.0, -2.0, -6.0)
    GL.Vertex3f(3.0, -2.0, 0.0)
    GL.Vertex3f(3.0, 2.0, 0.0)
    GL.Vertex3f(3.0, 2.0, -6.0)
  GL.End
<FONT Color=gray>' ''Parete sinistra:''</font>
  GL.Color3f(0.4, 0.6, 0.4)
  GL.Begin(GL.QUADS)
    GL.Vertex3f(-3.0, -2.0, 0.0)
    GL.Vertex3f(-3.0, -2.0, -6.0)
    GL.Vertex3f(-3.0, 2.0, -6.0)
    GL.Vertex3f(-3.0, 2.0, 0.0)
  GL.End
<FONT Color=gray>' ''Pavimento:''</font>
  GL.Color3f(0.7, 0.7, 0.7)
  GL.Begin(GL.QUADS)
    GL.Vertex3f(-3.0, -2.0, 0.0)
    GL.Vertex3f(3.0, -2.0, 0.0)
    GL.Vertex3f(3.0, -2.0, -6.0)
    GL.Vertex3f(-3.0, -2.0, -6.0)
  GL.End
<FONT Color=gray>' ''(Facoltativo) Soffitto:''</font>
  GL.Color3f(0.3, 0.3, 0.3)
  GL.Begin(GL.QUADS)
    GL.Vertex3f(-3.0, 2.0, 0.0)
    GL.Vertex3f(3.0, 2.0, 0.0)
    GL.Vertex3f(3.0, 2.0, -6.0)
    GL.Vertex3f(-3.0, 2.0, -6.0)
  GL.End
End






<FONT Color=red size=4><B>Pagina in costruzione !</b></font>
<FONT Color=red size=4><B>Pagina in costruzione !</b></font>

Versione delle 05:36, 19 lug 2025

Le risorse di OpenGL consentono anche di creare ambienti virtuali 3D, come ad esempio delle stanze e altri scenari all'interno dei quali l'osservatore è apparentemente inserito ed è in grado di muoversi e di agire.

Di seguito vediamo alcuni esempi di codice.

Codice essenziale per creare una stanza 3D

Public Sub Form_Open()

 With Me
   .x = 0
   .y = 0
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With 

End


Public Sub GLArea1_Resize()   ' Imposta la proiezione prospettica

 Dim w As Integer = GLArea1.W
 Dim h As Integer = GLArea1.H
 If h = 0 Then h = 1

 GL.Viewport(0, 0, w, h)

 GL.MatrixMode(GL.PROJECTION)
 GL.LoadIdentity()
 GLU.Perspective(60.0, w / h, 0.1, 100.0)

 GL.MatrixMode(GL.MODELVIEW)

End


Public Sub GLArea1_Draw()   ' Disegna la scena fissa (visuale da dentro la stanza)

 GL.Clear(GL.COLOR_BUFFER_BIT Or GL.DEPTH_BUFFER_BIT)
 GL.Enable(GL.DEPTH_TEST)

' Colore di sfondo:
 GL.ClearColor(0.2, 0.2, 0.25, 1.0)

' Ripristina la trasformazione base:
 GL.LoadIdentity()

' Posiziona la scena rispetto all'osservatore.
' L'osservatore è nel punto (0, 0, 0), guardando lungo -Z.
' Qui trasliamo tutto indietro e leggermente in basso:
 GL.Translatef(0.0, -1.0, -5.0)

' Disegna la stanza:
 DrawRoom()

 GL.Flush

End


Private Sub DrawRoom()   ' Costruisce le pareti e il pavimento della stanza

' Parete posteriore:
 GL.Color3f(0.5, 0.5, 0.9)
 GL.Begin(GL.QUADS)
   GL.Vertex3f(-3.0, -2.0, -6.0)
   GL.Vertex3f(3.0, -2.0, -6.0)
   GL.Vertex3f(3.0, 2.0, -6.0)
   GL.Vertex3f(-3.0, 2.0, -6.0)
 GL.End

' Parete destra:
 GL.Color3f(0.6, 0.4, 0.4)
 GL.Begin(GL.QUADS)
   GL.Vertex3f(3.0, -2.0, -6.0)
   GL.Vertex3f(3.0, -2.0, 0.0)
   GL.Vertex3f(3.0, 2.0, 0.0)
   GL.Vertex3f(3.0, 2.0, -6.0)
 GL.End

' Parete sinistra:
 GL.Color3f(0.4, 0.6, 0.4)
 GL.Begin(GL.QUADS)
   GL.Vertex3f(-3.0, -2.0, 0.0)
   GL.Vertex3f(-3.0, -2.0, -6.0)
   GL.Vertex3f(-3.0, 2.0, -6.0)
   GL.Vertex3f(-3.0, 2.0, 0.0)
 GL.End

' Pavimento:
 GL.Color3f(0.7, 0.7, 0.7)
 GL.Begin(GL.QUADS)
   GL.Vertex3f(-3.0, -2.0, 0.0)
   GL.Vertex3f(3.0, -2.0, 0.0)
   GL.Vertex3f(3.0, -2.0, -6.0)
   GL.Vertex3f(-3.0, -2.0, -6.0)
 GL.End

' (Facoltativo) Soffitto:
 GL.Color3f(0.3, 0.3, 0.3)
 GL.Begin(GL.QUADS)
   GL.Vertex3f(-3.0, 2.0, 0.0)
   GL.Vertex3f(3.0, 2.0, 0.0)
   GL.Vertex3f(3.0, 2.0, -6.0)
   GL.Vertex3f(-3.0, 2.0, -6.0)
 GL.End

End


Pagina in costruzione !