Piero V.

Blender: ruotare la camera col mouse

Continuano i miei esperimenti con Blender.

Una delle mie più grandi domande riguardanti la game mode è: come fare per spostare la telecamera col movimento del mouse?

Beh, mi sono messo ad affrontare questo problema.

Il metodo che io utilizzerei è quello di analizzare il movimento del mouse e quindi di applicarlo alla rotazione.

Per fare ciò è mia intenzione associare uno script python al controller mousemove.

Ecco un prototipo di codice, con i commenti che spiegano cosa fa questo codice:

# Importa le librerie basi: la bge e classi utili da mathutils
import bge
from mathutils import *

# Comincia la funzione main
def main():

    # Prende l'oggetto del controller
    cont = bge.logic.getCurrentController()
    # Prende l'oggetto a cui il controller è applicato
    own = cont.owner
    # Per comodità ci salviamo i globalDict come obj
    obj = bge.logic.globalDict

    # Prendiamo il movimento del mouse
    mousemove=cont.sensors['Mousemove']
    pos=mousemove.position

    # Se è il primo movimento dobbiamo inizializzare i salvataggi dei movimenti
    if not 'mousepos' in obj:
        obj['mousepos']=pos

    # Salviamo il movimento
    obj['oldmousepos']=obj['mousepos']
    obj['mousepos']=pos

    # Troviamo le variazioni
    deltax=obj['mousepos'][0]-obj['oldmousepos'][0]
    deltay=obj['mousepos'][1]-obj['oldmousepos'][1]

    # Creiamo il vettore ed eseguiamo la rotazione lungo l'asse delle z (globale)
    rot=Vector((deltay*0.005, 0.0, -deltax*0.005))
    own.applyRotation(rot, False)

    # Creiamo il vettore ed eseguiamo la rotazione lungo l'asse delle y (locale della camera)
    rot=Vector((-deltay*0.005, 0.0, 0.0))
    own.applyRotation(rot, True)

# Esegue main, ogni volta che il mouse viene mosso
main()

Il risultato è ancora molto primitivo, ma sempre meglio che nulla 😉

In alcuni giochi come i FPS questo movimento è essenziale e andrebbe definito meglio, però questo mi pare già un inizio non malvagio.

Bisognerebbe aggiungere un po’ di controlli per vedere che il mouse non vada fuori dallo schermo e sistemare un po’ i coefficienti della rotazione.