• Non ci sono risultati.

3.1 Implementazioni e strumenti nel Museo Virtuale in VR

3.1.10 Funzionalità per la fruizione dei beni culturali

La visualizzazione dell’ambiente virtuale con le opere d’arte non basta per poter permettere all’utente di fruire dei beni culturali attraverso la tecnologia; l’utente deve anche poter interagire con le opere che ha davanti e deve poter servirsi delle informazioni che esse contengono. Per questo motivo sono state aggiunte diverse funzionalità in modo da permettere all’utente di interagire con l’ambiente virtuale che lo circonda, personalizzando così l’esperienza immersiva e rendere più interessante la visita all’interno del museo virtuale.

3.1.10.1 Selezione dell’opera e visualizzazione dei metadati

Una funzionalità fondamentale riguarda quella della selezione dell’opera e la visualizzazione dei metadati correlati. Per poter consentire ciò all’utente sono stati seguiti i seguenti passi:

 Per prima cosa sono stati aggiunti dei nuovi oggetti invisibili che potessero essere riconosciuti da un dispositivo esterno (ad esempio un mouse);

 Nel disegnare gli oggetti invisibili, creo alcune condizioni per poterli rendere selezionabili; //creo tanti oggetti quante sono le opere d’arte presenti nel museo

for(var i = 0;i<len(aobj);i++){ ...

//creo un oggetto plane

planeSel = CVmNewMesh(VRP_PLANE); ...

//creo i dati della texture invisibile var vecCol = vector(4);

textSel = CVmTexture(1,1,VR_RGBA_TEXTURE,vecCol); ...

//creo gli oggetti con le proprietà delle opere d’arte objSel = CVmObj(planeSel);

objSel.SetId(i); ...

99

 Creo la funzione select() per poter visualizzare i metadati dell’oggetto selezionato che viene usato come parametro in entrata

for(var i = 0; i<len(asel); i++){

//disegno gli oggetti invisibili che si sovrappongono alle //opere d’arte

asel[i].Draw();

//se l’utente passa col mouse sull’opera e se la repository selezionata è Europeana o Wikimedia Commons poiché Google Images non fornisce metadati

if(selection(asel[i], SEL_PASS) && (val(splitParams[2]) ==2

|| val(splitParams[2]) == 3)){

//calcolo la distanza fra l’utente e l’opera d’arte utilizzando la formula della distanza di Euclide var getPos = asel[i].getposition();

var getCamPos = cameragetcurrent().getposition()

var x = (getPos[0]-getcampos[0]);

var y = (getPos[1]-getcampos[1]);

var z = (getPos[2]-getcampos[2]);

var distance = sqrt((x*x)+(y*y)+(z*z));

//l’utente è abbastanza vicino all’opera d’arte if(distance<80.0){

//istruzioni stampate su video

ConsoleText(0.01, 0.035, "Press D and pass to the quad to get description\nPress N to hide description.");

ConsoleText(0.75, 0.02, "Distance: "+str(distance));

//funzione per la visualizzazione dei metadati select(asel[i]);

} }

}

function select(obj){

//l’utente ha premuto il tasto D della tastiera If(Keystatus("D")){

trig_desc=true; }

if(trig_desc){

//recupero il numero identificativo dell’oggetto //corrispondente all’indice dei suoi metadata //nell’array aMetadata

var index = obj.getid();

continua...

var getArtist = aMetadata[index][0];

var getTitle = aMetadata[index][1];

var getDate = aMetadata[index][2];

var getDescription = aMetadata[index][3]; ConsoleText(0.02, 0.95, "Artist: "+getArtist); ConsoleText(0.02, 0.90, "Title: "+getTitle); ConsoleText(0.02, 0.85, "Date: "+getDate); ConsoleText(0.02, 0.80, "Description:

100

3.1.10.2 Navigazione assistita

Questa funzionalità funge da elemento accessorio per facilitare la fruizione del museo virtuale e migliorare l’esperienza dell’utente nella visita dell’ambiente. Il sistema consiste nell’etichettare le stanze del museo con le lettere dell’alfabeto e nel visualizzare quali opere sono presenti nelle diverse stanze, in modo che il visitatore possa muoversi da una stanza all’altra per vedere determinate opere senza dover effettuare tutto il percorso completo. L’aggiunta di questa funzionalità è stata resa possibile con le seguenti implementazioni:

 Per prima cosa vengono aggiunti degli oggetti CVmText, ovvero delle lettere dell’alfabeto

tridimensionali, una in ogni stanza per poter etichettare ogni spazio del museo; questa operazione va di pari passo con la costruzione delle stanze del museo:

...

//recupero i metadati dall’array var getArtist = aMetadata[index][0];

var getTitle = aMetadata[index][1];

var getDate = aMetadata[index][2];

var getDescription = aMetadata[index][3]; //stampo i metadati sulla console

ConsoleText(0.02, 0.95, "Artist: "+getArtist); ConsoleText(0.02, 0.90, "Title: "+getTitle); ConsoleText(0.02, 0.85, "Date: "+getDate); ConsoleText(0.02, 0.80, "Description: "+getDescription); } } function callModularity(num){ ...

//creo l’oggetto CVmText e gli assegno proprietà basilari come //font e posizione

textTopLeft = CVmText(charSet[contText], bbTop[0]+((bbTop[3]- bbtop[0])/2), 50.0, "Arial", 0);

//ingrandisco l’oggetto textTopLeft.setscale(5.0);

//creo un CVmObj padre per ospitare la lettera tridimensionale ObjTextTopLeft = CVmObj();

continua... ...

//collego la lettera tridimensionale con l’oggetto ObjTextTopLeft.LinkToText(textTopLeft);

//assegno la posizione

ObjTextTopLeft.SetPosition(bbTop[0]+((bbTop[3]-bbtop[0])/2),

0.0, bbTop[2]+((bbTop[5]-bbtop[2])/2));

//assegno un punto costituente il perno

ObjTextTopLeft.setpivotpoint(bbTop[0]+((bbTop[3]-bbTop[0]))/2,

50.0, bbTop[2]+((bbTop[5]-bbTop[2]))/2);

//aggiungo l’oggetto nell’array aadd(aTextObj, ObjTextTopLeft); ...

101

 La seconda operazione da fare è disegnare queste lettere tridimensionali all’interno dell’ambiente virtuale e farle ruotare in modo da essere visibili durante l’esplorazione del museo da parte dell’utente

 La terza operazione è controllare se l’utente decide di visualizzare la lista delle opere d’arte presenti nel museo premendo il tasto “H” della tastiera;

if(KeyStatus("H")){

trig_list = !trig_list; }

for(var i = 0; i<len(aTextObj);i++){ //ottengo un timer

var temp = gettime();

var Ltime = 0;

//passati 0.10 secondi if(temp-ltime>10){

//aumento l’angolo di rotazione textAngle += 0.0001;

//ruoto le lettere sull’asse Y

aTextObj[i].Rotate(textAngle, 0,1,0); }

//visualizzo le lettere nell’ambiente tridimensionale aTextObj[i].Draw();

102

 Nella OnFrame() viene invocata la funzione viewList() che si occupa di stampare sul video i valori relativi ai metadati delle opere del museo

function viewList(){

//se l’utente ha premuto il tasto H if(trig_list){

//spaziatura dei caratteri su video var spacing = 0.98;

var spacingMetadata = 0.96;

//contatore per elencare tutti i metadati var contUno = 0;

//contatore per elencare i metadati per ogni stanza var contDue = 0;

//accedo nell’array delle lettere tridimensionali for(var i = 0; i<len(aTextObj);i++){

ConsoleText(0.55, spacing, "Quadri presenti nella stanza "+charSet[i]+": "+selectView[i]);

//spaziatura fra i metadati spacing = spacing - 0.13; }

//elenco quattro metadati per stanza for(var i =0; i<len(aMetadata);i++){

//se ho rappresentato tutti i metadati esco dal ciclo

if(contUno == len(aMetadata)){

break; }

//azzero il contatore se completo i metadati di una stanza e inserisco uno spazio maggiore else if(contDue==4){

contDue = 0;

spacingMetadata = spacingMetadata - 0.05; }

//stampo i metadati su video ConsoleText(0.55, spacingMetadata, aMetadata[contUno][0]+" - "+aMetadata[contUno][1]); spacingMetadata = spacingMetadata - 0.02; //aggiorno i contatori contUno++; contDue++; } } }

103

 Sempre in OnFrame() è presente la funzionalità che permette all’utente di spostarsi da una stanza all’altra; ogni stanza viene identificata, oltre che con una lettera dell’alfabeto, anche con un numero intero che va da zero a otto, corrispondente al numero massimo di stanze che possono essere presenti nel museo virtuale;

Con questa ultima illustrazione si conclude il paragrafo riguardo le implementazioni e gli strumenti usati per la realizzazione del museo virtuale VR. Il prossimo paragrafo riguarderà le implementazioni e gli strumenti usati per la realizzazione del museo virtuale AR.