Category Archives: Base

Colori

Gli oggetti 3D hanno 2 proprietà con le quali si possono impostare il colore e l’opacità/trasparenza.


color


Nel sistema di colore RGB un colore si specifica come terna RGB (red, green, blue) con la quale si specifica quanto sono accesi i punti colorati corrispondenti dello schermo.

Il colore bianco corrisponde alla massima intensità per i tre colori fondamentali (1, 1, 1) mentre il nero corrisponde a tutto spento (0, 0, 0).
Il colore rosso più acceso si ottiene con (1, 0, 0), che significa tutto rosso e niente verde e blu.

Ecco alcuni esempi di triple RGB con il nome corrispondente

vector(0, 0, 0) color.black
vector(0, 0, 1) color.blue
vector(0, 1, 1) color.cyan
vector(0, 1, 0) color.green
vector(1, 0, 1) color.magenta
vector(1, 0.5, 0) color.orange
vector(0.4, 0.2, 0.6) color.purple
vector(1, 0, 0) color.red
vector(1, 1, 1) color.white
vector(1, 1, 0) color.yellow

Per creare qualsiasi sfumatura di colore si possono scegliere 3 valori a piacere per i 3 colori

  • vector(1, 0.7, 0.2), a coppery color

Le sfumature di grigio hanno una definizione specifica con un valore da 0.0 a 1.0

  • vector(0, 0, 0), color.gray(0.0), nero
  • vector(0.5, 0.5, 0.5), color.gray(0.5), grigio scuro
  • vector(1, 1, 1), color.gray(1.0), bianco

Il sistema di colore HSV non è disponibile ma ci sono 2 funzioni per passare dal sistema RGB a HSV (hue, saturation, brightness) e viceversa

  • c2=color.rgb_to_hsv(c1)
  • c1=color.hsv_to_rgb(c2)

Esempi


Il programma dimostrativo https://www.glowscript.org/#/user/GlowScriptDemos/folder/Examples/program/Color-RGB-HSV-VPython permette di agire su dei cursori per i valori di R, G, B, H, S e ottenere il colore desiderato e il codice corrispondente da copiare.


opacity


Gli oggetti diventano più o meno trasparenti specificando un valore da 0 a 1 per l’attributo opacity.

Per esempio

è un cubo rosso leggermente trasparente.

Il valore 0 assegnato all’attributo opacity significa oggetto totalmente trasparente mentre 1 significa totalmente opaco.

Problemi

  • Gli oggetti curve, convex, faces, points e helix non accettano il parametro opacity.
  • La scena con oggetti trasparenti potrebbe presentare degli errori…

Bounce

Tutorial ufficiale


Una pallina bianca

Una pallina azzura e una parete verde a destra

 

La posizione della palla dipende dal tempo: ball.pos=ball.pos+ball.velocity*deltat

Il tempo scorre per alcuni secondi: t=t+deltat

Se la posizione della palla supera quella del muro a destra allora si inverte il segno della velocità

La palla rimbalza sul lato destro ma si perde sul lato sinistro…
Un’altra parete e un’altra condizione per rimbalzare

La palla annega parzialmente nelle pareti, è necessario migliorare il controllo

Un vettore di colore giallo segue la palla e indica direzione e verso del movimento

Per seguire la traiettoria della palla aggiungi automaticamente una traccia grafica: make_trail=True

La traiettoria completamente orizzontale è prevedibile, aggiungi

  1. il movimento in verticale
  2. le pareti in alto e in basso
  3. i controlli corrispondenti

La palla si muove su un piano xy piuttosto che nello spazio 3d, aggiungi

  • il movimento in profondità
  • una parete di fondo
  • la parete frontale è solo immaginata…
  • i controlli corrispondenti


L’animazione può continuare all’infinito modificando la condizione del ciclo

Si può aggiungere una seconda palla con colore e vettore velocità diversi


Ancora…


  1. Più palline
  2. Posizione iniziale, velocità, colore a piacere
  3. Colori delle palline, o delle pareti, che cambiano quando c’è un rimbalzo
  4. Pareti mobili…

Per evitare che la finestra si adatti a ogni intervento dell’utente escludi autoscale prima del ciclo while

 

Per cominciare

Installa il modulo con il comando da shell

Aggiorna il modulo con


Includi in ogni programma la riga di codice

Oltre al modulo vpython importerà tutte le funzioni matematiche e

  • clock()
  • random(), numero casuale in [0.0, 1.0)
  • arange()

La scena tridimensionale e interattiva seguente è stata realizzata con poche righe di codice…


Le differenze principali rispetto a VPython sono

  1. I vettori devono essere definiti esplicitamente con vector(x,y,z) o vec(x,y,z), invece di (x,y,z).
    Vale nelle assegnazioni di pos, size, axis, color, up.
  2. Invece di display si utilizza canvas.
  3. Invece di gdisplay si utilizza graph.
  4. Alcuni oggetti grafici non sono implementati, alcuni hanno metodi diversi, …

Più sfere

Più sfere diventano delle figure interessanti

Wireframe