Creare con OpenGL un ambiente virtuale 3D: differenze tra le versioni
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 !