Anteprima
Vedrai una selezione di 7 pagine su 28
Tesina (Descrizione Elaborato) Pag. 1 Tesina (Descrizione Elaborato) Pag. 2
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Tesina (Descrizione Elaborato) Pag. 6
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Tesina (Descrizione Elaborato) Pag. 11
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Tesina (Descrizione Elaborato) Pag. 16
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Tesina (Descrizione Elaborato) Pag. 21
Anteprima di 7 pagg. su 28.
Scarica il documento per vederlo tutto.
Tesina (Descrizione Elaborato) Pag. 26
1 su 28
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

PrendiOggetti.cs

using UnityEngine;

using System.Collections;

using System;

public class PrendiOggetti : MonoBehaviour

{ public int Monete = 0;

public int vitedisponibili = 3;

public int energia = 30;

string senergia= "";

bool finish = false;

bool win = false;

bool vita1 = false;

bool vita2 = false;

GUIStyle style = new GUIStyle();

public GUIStyle iconamonete;

public GUIStyle iconavite;

public GUIStyle iconaenergia;

void Start()

{ Monete = 0;

vitedisponibili = 3;

InvokeRepeating("decreaseEnergy", 1, 1);

InvokeRepeating("IncreaseCoins", 1, 1);

senergia = "||||||||||||||||||||||||||||||";

style.alignment = TextAnchor.MiddleLeft;

}

void Update()

{ if(Monete >= 10)

{ win = true;

}

}

void OnGUI()

{ if (energia > 0 && vitedisponibili > 0 && !win)

{ if (GUI.Button(new Rect(1210, 650, 130, 30), "Back To Menu"))

{ Application.LoadLevel("Menu");

}

GUI.Label(new Rect(10, 10, 80, 80), "Coins " + Monete, iconamonete);

GUI.Label(new Rect(10, 620, 80, 80), "Life " + vitedisponibili, iconavite);

GUI.color = Color.yellow;

GUI.Label(new Rect(1100, 10, 80, 80), "Energy " , iconaenergia);

GUI.Box(new Rect(1200, 22, 130, 20), senergia);

}

if (finish)

Application.LoadLevel ("Game_over");

if (win)

Application.LoadLevel ("Win");

} 8

void decreaseEnergy()

{ energia--;

if(energia >= 0)

senergia = senergia.Substring(0, senergia.Length - 1);

if (energia == 0 && vitedisponibili>0)

{ vitedisponibili -= 1;

energia = 30;

senergia = "||||||||||||||||||||||||||||||";

} if (vitedisponibili == 0)

finish = true;

}

void IncreaseCoins()

{ if ((Monete == 4) && vita1 == false)

{ vita1 = true;

vitedisponibili += 1;

}

if ((Monete == 8) && vita2 == false)

{ vita2 = true;

vitedisponibili += 1;

}

}

private int strlen(string senergia)

{ throw new NotImplementedException();

}

public void PrendiMonetina(int mon)

{ Monete += mon;

}

}

Tale script è associato ad Ethan, personaggio animato incluso negli standard Assets di Unity 5.

Ad Ethan sono associati anche altri script che permettono l’animazione e il movimento, il quale

avviene attraverso l’utilizzo dei tasti di direzione. 9

Su Ethan è posizionata una camera che permette la visione del gioco in terza persona. 10

L’oggetto Monetina è stato scaricato dall’Asset Store

Ad esso sono associati:

 Lo script che permette l’animazione e quindi la rotazione delle monetine:

RotazioneOggetto.cs

using UnityEngine;

using System.Collections;

public class Rotazioneoggetto : MonoBehaviour {

public float Rotazione = 50.0f;

void Update ()

{ transform.Rotate(Vector3.up * Rotazione * Time.deltaTime);

}

}  Lo script che permette al personaggio di raccogliere l’oggetto:

Monetina.cs

using UnityEngine;

using System.Collections;

public class Monetina : MonoBehaviour 11

{ public int aggiungimonetina = 1;

public PrendiOggetti prendioggetti;

void OnTriggerEnter(Collider other)

{

if (other.GetComponent<Collider>().tag == "Player")

{ other.GetComponent<Collider>().gameObject.SendMessage("PrendiMonetina",

aggiungimonetina, SendMessageOptions.DontRequireReceiver);

Destroy(gameObject);

}

}

}  Tourist Guide

Il gioco prevede anche una guida turistica con la possibilità di scegliere tra tre lingue: Italiano,

Inglese e Francese. 12

Una volta scelta la lingua, il giocatore potrà ascoltare la voce guida e allo stesso tempo scorrere il

testo informativo ed osservare l’immagine del tempio.

I componenti della scena sono:

Nella sezione Tourist Guide è possibile anche:

1) Effettuare una passeggiata virtuale all’interno del Tempio (nella realtà questo non è

possibile), con la possibilità di recepire altre informazioni.

Ad esempio, come mostrato in figura, se il personaggio si avvicinerà al cartello, esso

sarà illuminato e saranno mostrate delle immagini riguardanti il bene culturale flegreo;

tale operazioni vengono effettuate mediante l’ausilio di Intelligenza Artificiale. 13

LightScript.js (script per l’accensione della luce)

#pragma strict

private var LightShow : boolean = false;

var myLight : Light;

function OnTriggerStay (Col : Collider)

{ if(Col.tag == "Player")

LightShow = true;

}

function OnTriggerExit (Col : Collider)

{ if(Col.tag == "Player")

LightShow = false;

}

function Update() {

if (LightShow == true ) { myLight.enabled = true;

}

else if (LightShow == false) { myLight.enabled = false;

}

} 14

GUIAppear.js (script per la visione intelligente delle immagini)

#pragma strict

private var guiShow : boolean = false;

var riddle1 : Texture;

var riddle2 : Texture;

function OnTriggerStay (Col : Collider)

{ if(Col.tag == "Player")

guiShow = true;

}

function OnTriggerExit (Col : Collider)

{ if(Col.tag == "Player")

guiShow = false;

}

function OnGUI()

{ if(guiShow == true){

GUI.DrawTexture(Rect(400, 10, 250, 320), riddle1);

GUI.DrawTexture(Rect(700, 10, 257, 318), riddle2);

}

} Il giocatore per terminare la passeggiata virtuale e per ritornare al Main Menu, dovrà

aprire il cancello cliccando sul tasto “P”. Tale interazione viene anch’essa effettuata

attraverso Intelligenza Artificiale. 15

Gate.js (script per l’apertura/chiusura del cancello)

#pragma strict

var smooth = 0.5;

var DoorOpenAngle = 90.0;

private var open : boolean;

private var enter : boolean;

private var defaultRot : Vector3;

private var openRot : Vector3;

function Start(){

defaultRot = transform.eulerAngles;

openRot = new Vector3 (defaultRot.x, defaultRot.y + DoorOpenAngle, defaultRot.z);

}

function Update (){

if(open){

//Open door

transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, openRot, Time.delt

aTime * smooth);

}

else{ //Close door

transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, defaultRot, Time.d

eltaTime * smooth); }

if(Input.GetKeyDown("p") && enter){

open = !open;

}

}

function OnGUI(){

if(enter){

GUI.Box(new Rect(Screen.width/2 - 75, Screen.height -

100, 335, 30), "Press 'P' to open/close the gate and go to Menu");

}

}

//Activate the Main function when player is near the door

function OnTriggerEnter (other : Collider){

if (other.gameObject.tag == "Player") {

enter = true;

}

}

//Deactivate the Main function when player is go away from door

function OnTriggerExit (other : Collider){

if (other.gameObject.tag == "Player") {

enter = false; 16

}

}

Esci.js (script per l’uscita dal Tempio)

#pragma strict

private var Exit : boolean = false;

function OnTriggerStay (Col : Collider)

{ if(Col.tag == "Player")

Exit = true;

}

function Update()

{ if(Exit == true){

Application.LoadLevel("Menu");

}

}

2) Modificare la luminosità e il contrasto dell’immagine del Tempio.

 Setting Image

Per completezza, nel progetto, è stata inserita una sezione dedicata alle tecniche di Image

Processing. L’ambiente di sviluppo adoperato per tali operazioni è Eclipse; la libreria software

utilizzata per l’Image Processing è OpenCV. 17

OpenCV

OpenCV Library acronimo di Open Computer Vision Library è una libreria che colleziona algoritmi

open source per la computer vision e l’image processing. Questa libreria, scritta in C e C++,

sviluppata inizialmente da Intel, è disponibile su diverse piattaforme (Windows, Unix, MacOs e

ultimamente anche per Android).

Abbiamo utilizzato la suddetta libreria per applicare alle immagini delle tecniche di Image

Processing, nello specifico abbiamo utilizzato tecniche di Image Enhancement :

 Increase Brightness

 Increase Contrast

Sostanzialmente l’obiettivo dell’Image Enhancement è quello di elaborare le immagini per il loro

miglioramento; il concetto di miglioramento è molto vago e non oggettivo, in quanto è legato

all’applicazione nella quale utilizzeremo l’immagine.

Le operazioni fatte possono essere descritte rigorosamente come funzioni matematiche e di

conseguenza rappresentate graficamente.

Increase Brightness

Alcune trasformazioni di tipo point to point possono essere facilmente utilizzate per

incrementare/decrementare la luminosità di un’immagine. Ad esempio la seguente

trasformazione per un’immagine a colori (con k=8 bit per banda): 18

permette di incrementare la luminosità dell’immagine stessa, essendo La funzione di

trasformazione in questo caso si presenta come una retta rialzata di un valore che andrà ad

incrementare i valori di intensità di colore dei pixel dell’immagine, con un salto esatto di livelli.

Ad un certo punto si ha un tratto costante, detto di saturazione, dove ad ogni profondità di colore

dell’immagine di

partenza si fa corrispondere la massima luminosità (bianco).

Il codice Java per l’incremento di luminosità di un’immagine a colori è il seguente :

package enhancing;

import org.opencv.core.Core;

import org.opencv.core.Mat;

import org.opencv.highgui.Highgui;

public class Brightness {

static int width;

static int height;

static double alpha = 1;

static double beta = 50

public static void main( String[] args ) {

try{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 19

Mat source =

Highgui.imread("C:\\Users\\home\\Desktop\\universita\\SMU\\Seminari\\Image

Processing\\immagini\\Tempio_Serapide.jpg",Highgui.CV_LOAD_IMAGE_COLOR);

Mat destination = new

Mat(source.rows(),source.cols(),source.type());

source.convertTo(destination, -1, alpha, beta);

Highgui.imwrite("C:\\Users\\home\\Desktop\\universita\\SMU\\Seminari\\Image

Processing\\immagini\\Brightness.jpg", destination);

}catch(Exception e){

System.out.println("error: " + e.getMess age());

}

}

}

Increase Contrast

Il contrasto di un’immagine può essere visto come il rapporto tra la luminosità degli oggetti in essa

rappresentati e quella del background.

L’incremento del contrasto corrisponde a “risaltare” gli oggetti rispetto allo sfondo

evidenziandone i dettagli.

L’aumento di contrasto avviene introducendo due zone di saturazione. I pixel “scuri” sono resi

ancora più

Dettagli
Publisher
A.A. 2016-2017
28 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher cikenthebest di informazioni apprese con la frequenza delle lezioni di Sistemi multimediali e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Moscato Vincenzo.