canale visivo: componenti
TRANSCRIPT
Rendering
AMBIENTE VIRTUALEAMBIENTE VIRTUALE
UTENTEUTENTE
CANALE
VISIVO
CANALE
VISIVOCANALE
ACUSTICO
CANALE
ACUSTICOCANALE
APTICO
CANALE
APTICO
CANALE
INERZIALE
CANALE
INERZIALE
Canale visivo: componentiCanale visivo: componenti
GraphicalFeedback
GraphicalGraphical
FeedbackFeedback
SW modules of visualmodelling & rendering
SW SW modulesmodules of visualof visual
modellingmodelling & rendering& rendering
HW devices
of visualization
HW HW devicesdevices
of of visualizationvisualization
Rendering
Moduli logiciModuli logici
SintesiSintesiSintesi CampionamentoCampionamentoCampionamento
ComportamentiComportamentiComportamenti ProprietàProprietProprietàà
RenderingRenderingRendering
UTENTEUTENTE
InterazioneInterazioneInterazione
AMBIENTE VIRTUALEAMBIENTE VIRTUALE
ModellazioneModellazioneModellazione
ManagementManagementManagement
Rendering
Software per la grafica 3DSoftware per la grafica 3D
Obiettivi distinti ma collegati:
� modellazione geometrica
� animazione
� modellazione fisica
� rendering
- impostazione delle luci
- definizione dei materiali
- definizione delle inquadrature
- calcolo del risultato
- offline / real-time
generazione di un immagine 2D
corrispondente alla prospettiva
della scena/modello a partire dal
viewpoint
Rendering
Software per la grafica 3DSoftware per la grafica 3D
�� grandissima varietgrandissima varietàà
�� in genere rispondono a molteplici esigenzein genere rispondono a molteplici esigenze
�� spesso a tutte ma a diversi livelli di spesso a tutte ma a diversi livelli di
completezzacompletezza
�� in linea di massima possiamo distinguere:in linea di massima possiamo distinguere:
�� ““suitesuite”” completecomplete
�� tooltool specifici (spesso specifici (spesso pluginplugin per le suite) per le suite)
�� molti paradigmi diversimolti paradigmi diversi
�� interfacce molto dissimiliinterfacce molto dissimili
�� tendenza all'uniformittendenza all'uniformitàà
Rendering
ModellazioneModellazione
�� PoligonalePoligonale–– low low polypoly per applicazioni interattiveper applicazioni interattive
–– strumenti specifici per ridurre il numero di strumenti specifici per ridurre il numero di poligonipoligoni
�� NURBS e similiNURBS e simili–– curve parametrichecurve parametriche
–– uso tipico: CAD, designuso tipico: CAD, design(es. automobili)(es. automobili)
�� DigitalDigital sculptingsculpting–– diverso modo di diverso modo di interagire con interagire con meshmesh poligonalipoligonali
Rendering
AnimazioneAnimazione
�� definizione percorsidefinizione percorsi
–– in genere curve parametrichein genere curve parametriche
�� definizione deformazionidefinizione deformazioni
–– tramite armaturetramite armature
�� tipico ad esempio per personaggi o strumenti tipico ad esempio per personaggi o strumenti meccanicimeccanici
–– tramite interpolazione fra tramite interpolazione fra meshmesh modificate modificate (key frame (key frame animationanimation))
�� tipico ad esempio per le espressioni faccialitipico ad esempio per le espressioni facciali
�� gestione di azioni e interpolazionigestione di azioni e interpolazioni
Rendering
DefinizioneDefinizione dei dei materialimateriali
�� strettamente connessa all'uso previstostrettamente connessa all'uso previsto
–– per applicazioni interattiveper applicazioni interattive
�� fino a ieri poco pifino a ieri poco piùù che definizione che definizione texturetexture
�� oggi software appositi per messa a punto shadersoggi software appositi per messa a punto shaders
–– RenderMonkeyRenderMonkey
–– per rendering offlineper rendering offline
�� modelli di interazione luminosa complessimodelli di interazione luminosa complessi
�� possibilitpossibilitàà di esprimere le proprietdi esprimere le proprietàà del materiale del materiale addirittura con del codiceaddirittura con del codice–– sistemi sistemi RenderManRenderMan, , shadingshading a nodi, ecc.a nodi, ecc.
Rendering
RenderingRendering
�� gestione della telecameragestione della telecamera
–– piazzamento nella scena, inquadratura, lente,piazzamento nella scena, inquadratura, lente,
–– moto della camera, ecc.moto della camera, ecc.
�� impostazione di parametriimpostazione di parametri
–– dimensioni finalidimensioni finali
–– numero di framenumero di frame
–– varie impostazioni di qualitvarie impostazioni di qualitàà
�� grande varietgrande varietàà di tipi di rendererdi tipi di renderer
–– Non Non PhotorealisticPhotorealistic Rendering, Rendering, biasedbiased//unbiasedunbiased((““corretticorretti”” o o ““approssimatiapprossimati””) ecc.) ecc.
Rendering
GestioneGestione del del comportamentocomportamento interattivointerattivo
�� definirlo direttamente definirlo direttamente ““dentrodentro”” il programma, il programma, impostando proprietimpostando proprietàà dei vari oggettidei vari oggetti
–– generalmente pigeneralmente piùù facile ma meno potentefacile ma meno potente
�� esportare la geometria e gestire gli oggetti in un esportare la geometria e gestire gli oggetti in un altro ambiente di sviluppoaltro ambiente di sviluppo
–– necessitiamo dunque di un necessitiamo dunque di un exporterexporter per il formato:per il formato:
�� leggere dal programma originale i dati che ci leggere dal programma originale i dati che ci interessano (serve dunque una API di interazione con interessano (serve dunque una API di interazione con quel particolare programma)quel particolare programma)
�� riorganizzarli e scriverli in un file secondo le nostre riorganizzarli e scriverli in un file secondo le nostre esigenzeesigenze
Rendering
Software per Software per modellazionemodellazione e renderinge rendering
Rendering
Autodesk 3ds MaxAutodesk 3ds Max
�� molto diffusomolto diffuso
–– buon compromesso fra aspetti artistici e CADbuon compromesso fra aspetti artistici e CAD
–– JurassicJurassic Park, Harry Potter, etc.Park, Harry Potter, etc.
�� modellazione, materiali, animazione, renderingmodellazione, materiali, animazione, rendering
�� integrazione con renderer esterni (integrazione con renderer esterni (MentalMental Ray, Ray, VRayVRay, etc.), etc.)
�� ScriptingScripting, SDK, SDK
�� versione 9, costo $3.495versione 9, costo $3.495
�� www.autodesk.com/3dsmaxwww.autodesk.com/3dsmax
Rendering
Autodesk MayaAutodesk Maya
�� interfaccia raffinata (es. meninterfaccia raffinata (es. menùù circolari)circolari)
�� scriptingscripting molto potente, anche molto potente, anche PythonPython
�� costo versione 8.5: $1999 o $6999 (costo versione 8.5: $1999 o $6999 (unlimunlim.).)
�� www.autodesk.com/mayawww.autodesk.com/maya
Rendering
BlenderBlender
�� programma free e open sourceprogramma free e open source
�� suite di suite di tooltool per il 3Dper il 3D–– modellazione (supporta modellazione (supporta digitaldigital sculptingsculpting))
–– animazione piuttosto avanzataanimazione piuttosto avanzata
–– rendering: non il punto forterendering: non il punto forte
�� video editing e video editing e compositingcompositing
�� game game engineengine
�� Wiki: Wiki: wiki.blender.orgwiki.blender.org
�� Forum: Forum: www.blenderartist.orgwww.blenderartist.org
Rendering
AltriAltri softwaresoftware
�� Cinema, videogiochi:Cinema, videogiochi:– Softimage|XSI (es. FFXI, Half Life 2, etc.)
www.softimage.com
– Lightwave 3d 09 - www.newtek.com/lightwave
� Modelli x Mappe 3D– Google SketchUp - www.sketchup.com
� CAD meccanici– Pro-Engineer
– Solidworks
� Altri CAD– AutoCAD (architettura, ingegneria)
– ArchiCAD (architettura)
– Rhino (NURBS, design)
Rendering
AltriAltri softwaresoftware
�� DigitalDigital SculptingSculpting::–– PixologicPixologic ZZ--Brush 3.0Brush 3.0
�� www.pixologic.com/zbrush/homewww.pixologic.com/zbrush/home
–– MudboxMudbox 1.01.0�� www.mudbox3d.comwww.mudbox3d.com
�� AnimazioneAnimazione didi figure figure umaneumane::–– PoserPoser
�� GenerazioneGenerazione didi scenariscenari realisticirealistici–– BryceBryce
�� ConvertitoriConvertitori didi formatiformati–– OkinoOkino PolytransPolytrans
–– Deep ExplorationDeep Exploration
Rendering
RendererRenderer
�� Commerciali:Commerciali:–– MaxwellMaxwell
–– MentalMental RayRay
–– RenderManRenderMan
–– VrayVray
�� Free: Free: –– IndigoIndigo, , YafrayYafray, , POVrayPOVray, , WinOSIWinOSI......
Rendering
Software per rendering realSoftware per rendering real--timetime
Rendering
3D real3D real--time librariestime libraries
�� LibrerieLibrerie didi ““basso basso livellolivello””::–– OpenGLOpenGL
�� Cross platformCross platform
�� Non Non proprietariaproprietaria
�� SupportataSupportata dada un Architectural Review Boardun Architectural Review Board
�� EstensibileEstensibile
�� UsataUsata soprattuttosoprattutto neinei settorisettori professionali/ricercaprofessionali/ricerca
–– Direct3DDirect3D�� Parte Parte didi DirectXDirectX
�� ProprietariaProprietaria (Microsoft)(Microsoft)
�� Windows onlyWindows only
�� DiffusissimaDiffusissima per per giochigiochi
Rendering
3D real3D real--time enginestime engines
�� Le Le librerielibrerie didi basso basso livellolivello sonosono perfettamenteperfettamenteutilizzabiliutilizzabili direttamentedirettamente nellenelle applicazioniapplicazioni, ma un , ma un livellolivello pipiùù alto alto èè spessospesso moltomolto utile:utile:–– RiutilizzoRiutilizzo didi codicecodice
–– OttimizzazioneOttimizzazione delledelle funzionalitfunzionalitàà
–– ImplementazioneImplementazione didi funzionalitfunzionalitàà didi base non base non disponibilidisponibili((eses. . caricamentocaricamento didi mesh)mesh)
�� NasconoNascono numerosinumerosi ““3D Engine3D Engine”” cheche sisi fannofanno caricocaricodidi rendererendere trasparentitrasparenti al al programmatoreprogrammatore moltemolteoperazionioperazioni–– Quake Engine (ID Software)Quake Engine (ID Software)
–– Unreal EngineUnreal Engine
–– Ogre 3DOgre 3D
–– etcetc
Rendering
ComplessitComplessitàà di un sistema VRdi un sistema VR
CANALE
VISIVO
CANALE
VISIVOCANALE
ACUSTICO
CANALE
ACUSTICOCANALE
APTICO
CANALE
APTICO
CANALE
INERZIALE
CANALE
INERZIALE
AMBIENTE VIRTUALEAMBIENTE VIRTUALE
UTENTEUTENTE
Visual
Rendering(~ 60 Hz)
Audio
Rendering(~ 60 Hz)
Haptic
Rendering(~ 1 KHz)
MotionRendering
(~ 1 KHz)
TrackingMoCap(~ 30 Hz)
Interaction
Manager(~ 30 Hz)
Simulazione
(Fisica, …)(~ 200 Hz)
NetworkManager(~ 10 Hz)
MainApplication
Rendering
VR frameworksVR frameworks
�� I 3D engines I 3D engines sonosono solo solo unouno dei dei componenticomponenti didi un un sistemasistema didiRVRV
�� Per Per gestiregestire efficamenteefficamente ll’’interazioneinterazione e e ilil rendering rendering susu tuttituttii i canalicanali sensorialisensoriali occorreoccorre integrareintegrare numerosenumerose librerielibrerie, , engines, e driverengines, e driver–– EsempioEsempio::
�� CanaleCanale visivovisivo: OpenGL/: OpenGL/DirectxDirectx (o 3D Engines built(o 3D Engines built--onon--top)top)
�� CanaleCanale acusticoacustico: : OpenALOpenAL/DirectSound (o 3DAudio Engines /DirectSound (o 3DAudio Engines -- eses. . FmodFmod))
�� CanaleCanale aptico: aptico: OpenHaptics/ChaiOpenHaptics/Chai (o Haptics Engines (o Haptics Engines –– eses. . HapticwebHapticweb))
�� ApproccioApproccio bulldozer: bulldozer: applicazioneapplicazione C++ C++ cheche usausa tuttitutti questiquesticomponenticomponenti --> > programmerprogrammer’’s nightmares nightmare
�� ApproccioApproccio auspicabileauspicabile: : utilizzoutilizzo didi un framework un framework cheche sisifacciafaccia caricocarico didi tuttatutta la la gestionegestione delldell’’infrastrutturainfrastruttura ((eses. . comunicazionecomunicazione frafra librerielibrerie, networking, , networking, supportosupporto ad ad hardware hardware didi diversodiverso tipotipo, etc.), etc.)
Rendering
VRFramework
VR frameworksVR frameworks
HW Visual HW Audio HW Haptic HW Tracking
OpenGL OpenAL OpenHaptics
Fisica
Applicazione
Networking
OpenGL OpenAL
3D GraphicsEngine
3D Audio Engine 3D Haptics Engine
Rendering
Workflow (Workflow (canalecanale visivovisivo))
3D ModelingSoftware
Geometria
MaterialiTexture
modellazione
File geometria
Textures
esportazione
importa
zione
VRFramework
programmazioneApplicazione
AmbienteVirtuale
Rendering
VR framework: VR framework: VirtoolsVirtools
�� CommercialeCommerciale
�� Suite Suite didi strumentistrumenti didi svilupposviluppo
�� SeparaSepara gligli ““oggettioggetti”” daidai ““comportamenticomportamenti””
�� Le Le applicazioniapplicazioni nascononascono dalldall’’assemblaggioassemblaggio didi oggettioggetti e e comportamenticomportamenti
�� GUI GUI visualevisuale per per assemblareassemblareblocchiblocchi precostituitiprecostituiti
�� LinguaggioLinguaggio didi scripting per scripting per specificarespecificare comportamenticomportamentipipiùù articolatiarticolati
�� SupportaSupporta moltimolti dispositividispositivi didirendering (rendering (dallodallo schermoschermosemplicesemplice al CAVE)al CAVE)
�� http://http://www.virtools.comwww.virtools.com
Rendering
VR framework: VR ToolkitVR framework: VR Toolkit
�� SupportoSupporto a a
–– TecnologieTecnologie didi visualizzazionevisualizzazione stereoscopicastereoscopica
–– GuantiGuanti (data gloves)(data gloves)
–– DispositiviDispositivi apticiaptici
–– Gamepads e joystickGamepads e joystick
–– SuonoSuono 3D3D
–– NetworkingNetworking
�� LinguaggioLinguaggio didi script script basatobasato susu PythonPython
�� http://www.worldviz.comhttp://www.worldviz.com
Rendering
VR framework: XVRVR framework: XVR
Rendering
XVRXVR
Rendering
Virtual MachineVirtual MachineVirtual Machine
Hardware Abstraction LayerHardware Abstraction LayerHardware Abstraction Layer
Scene GraphScene GraphScene Graph
Core LibrariesCore LibrariesCore Libraries
XVR stack XVR stack didi svilupposviluppo
3d GraphicsEngine
3d Graphics3d GraphicsEngineEngine
3d SoundEngine
3d Sound3d SoundEngineEngine
PhysicsEngine
PhysicsPhysicsEngineEngine
HapticsEngine
HapticsHapticsEngineEngine
VR System HardwareVR System HardwareVR System Hardware
XVR Scripting LanguageXVR Scripting LanguageXVR Scripting Language
VR SystemDevelopment
VR SystemVR System
DevelopmentDevelopment
Cluster RendererCluster RendererCluster Renderer
Rendering
~ 60 Hz 100-1000 Hz
3 3 CallbackCallback principaliprincipali
OnFrameOnFrame()() OnTimerOnTimer()()
TutteTutte le le variabilivariabili sonosono condivisecondivise
OnEventOnEvent()()VR_EVENT_1VR_EVENT_1
VR_EVENT_3VR_EVENT_3
VR_EVENT_2VR_EVENT_2
VR_EVENT_4VR_EVENT_4
XVR LoopsXVR Loops
Rendering
User interaction User interaction
managementmanagement
XVR featuresXVR features
MultiMulti--channel visual stereoscopic display (channel visual stereoscopic display (CAVEsCAVEs))
PhotoPhoto--realistic renderingrealistic rendering
Hardware interfaces supportHardware interfaces supportAdvanced content authoring and managementAdvanced content authoring and management
Rendering
XVR Cluster RendererXVR Cluster Renderer
CRT pro jec t or
Scr een
Sc ree nScr een
CRT pr ojec torCRT pro jec t or
Eth er net
VRl ib Client
VRl ibServersXVR Slaves
XVR Master
Rendering
XVR Cluster Renderer (CAVE)XVR Cluster Renderer (CAVE)
Rendering
EE’’ suddiviso in due moduli principali:suddiviso in due moduli principali:
�� XVR Virtual XVR Virtual MachineMachine: contiene il core della tecnologia : contiene il core della tecnologia ((engineengine grafico, grafico, engineengine multimediale etc.)multimediale etc.)
�� XVR XVR ActiveXActiveX Control: realizza lControl: realizza l’’interfaccia webinterfaccia web
– Opzionalmente èpossibile aggiungere moduli addizionali per gestire features extra
XVRXVR
Rendering
�� La XVRLa XVR--VM contiene:VM contiene:
-- Un set di istruzioni bytecodeUn set di istruzioni bytecode
-- Un set di registriUn set di registri
-- Uno Uno stackstack
-- Un area per i metodiUn area per i metodi
�� Il comportamento delle applicazioni viene Il comportamento delle applicazioni viene specificato tramite un linguaggio di specificato tramite un linguaggio di scriptingscripting (S3D)(S3D)
�� Lo script S3D viene compilato in un bytecode che Lo script S3D viene compilato in un bytecode che viene processato ed eseguito dalla XVRviene processato ed eseguito dalla XVR--VMVM
XVR Virtual XVR Virtual machinemachine
Rendering
XVR WorkflowXVR Workflow
CompilerInterpreter
(Virtual Machine)
Dedicated scripting language
Output
Binary
ByteCode
Rendering
�� Il bytecode prodotto (.Il bytecode prodotto (.binbin) può essere eseguito dalla VM con ) può essere eseguito dalla VM con unun’’applicazione ad hoc o inserito in una pagina HTMLapplicazione ad hoc o inserito in una pagina HTML
�� Quando si accede, in locale o in remoto, alla pagina HTML Quando si accede, in locale o in remoto, alla pagina HTML che ospita lche ospita l’’applicazione XVR:applicazione XVR:
–– Viene controllata la versione dellViene controllata la versione dell’’XVR XVR engineengine e, se localmente e, se localmente èèassente quella specificata nella pagina HTML, viene scaricata daassente quella specificata nella pagina HTML, viene scaricata dalla lla rete la versione giustarete la versione giusta
–– Viene scaricato il bytecode dellViene scaricato il bytecode dell’’applicazioneapplicazione
–– Vengono scaricati i file di dati associati allVengono scaricati i file di dati associati all’’applicazione (modelli3d, applicazione (modelli3d, texturestextures, file multimediali etc.), file multimediali etc.)
–– Viene eseguito il bytecode sulla XVRViene eseguito il bytecode sulla XVR--VMVM
Web Web embeddingembedding
Rendering
<OBJECT <OBJECT ID=ID=““AppNameAppName““
WIDTH = 800WIDTH = 800
HEIGHT = 800HEIGHT = 800
CLASSID = "CLSID:5D589287CLASSID = "CLSID:5D589287--14961496--42234223--AE64AE64--65FA078B5EAB"65FA078B5EAB"
TYPE = "TYPE = "applicationapplication//xx--oleobjectoleobject" " align=align=""leftleft" " border=border="2""2"
CODEBASE =CODEBASE ="http://"http://client.vrmedia.itclient.vrmedia.it/XVRPlayer.cab#Version=1,0,0,900/XVRPlayer.cab#Version=1,0,0,900““
>>
<PARAM <PARAM NAME=NAME=""ScriptNameScriptName" " VALUE=VALUE=" AppName.s3d.bin">" AppName.s3d.bin">
<PARAM <PARAM NAME=NAME=""EngineVersionEngineVersion" " VALUE=VALUE="0136">"0136">
<PARAM <PARAM NAME=NAME=""BackgroundColorBackgroundColor" " VALUE=VALUE="#000066">"#000066">
<PARAM <PARAM NAME=NAME=""ParamsParams" VALUE "DEPTH=24">" VALUE "DEPTH=24">
<PARAM <PARAM NAME=NAME=““UserParamsUserParams" VALUE "" VALUE "……">">
</OBJECT></OBJECT>
Web Web embeddingembedding: codice HTML: codice HTML
Rendering
““Engine versionEngine version””
•• Un solo Un solo controllocontrollo ActiveX control for ActiveX control for
versioniversioni multiple multiple delldell’’EngineEngine
•• OgniOgni Engine Engine èè autosufficienteautosufficiente
•• Di Di tantotanto in in tantotanto vengonovengono rilasciaterilasciate nuovenuove
versioniversioni delldell’’EngineEngine (auto(auto--update update dada web)web)
•• The sequence was 0100, 0101, The sequence was 0100, 0101, …… , 0142, 0142
ConvenzioneConvenzione didi namingnaming
01420142Engine FamilyEngine Family
((sempresempre la la stessastessa))Compiler Generation NumberCompiler Generation Number
ProgressivoProgressivo allall’’internointerno
delladella famigliafamiglia
Rendering
XVR scripting language (.S3D)XVR scripting language (.S3D)
•• SintassiSintassi simile a JAVA e BASICsimile a JAVA e BASIC
•• Byte code Byte code –– virtual machine virtual machine
modelmodel
•• Type lessType less
•• Object orientedObject oriented
•• CostruttiCostrutti dedicatidedicati allaalla VRVR
Rendering
�� Ogni script S3D Ogni script S3D èè basato su 6 funzioni predefinite:basato su 6 funzioni predefinite:–– OnDownloadOnDownload()()
–– OnInitOnInit()()
–– OnFrameOnFrame()()
–– OnTimerOnTimer()()
–– OnEventOnEvent()()
–– OnExitOnExit()()
�� Queste funzioni vengono automaticamente invocate Queste funzioni vengono automaticamente invocate al verificarsi di determinati evential verificarsi di determinati eventi
Struttura di uno script S3DStruttura di uno script S3D
Rendering
OnDownloadOnDownload()()
•• EE’’ la prima la prima funzionefunzione ad ad essereessereinvocatainvocata
•• OgniOgni voltavolta cheche unouno script XVR script XVR vienevieneeseguitoeseguito, , vieneviene creatacreata unauna cartellacartella didilavorolavoro nellanella temp temp didi sistemasistema
•• NellaNella OnDownloadOnDownload i files i files usatiusatidalldall’’applicazioneapplicazione dalladalla locazionelocazioneoriginaleoriginale (server o locale) (server o locale) vengonovengonospostatispostati nellanella cartellacartella didi lavorolavoro
•• GliGli archiviarchivi ZIP ZIP vengonovengonodecompressidecompressi automaticamenteautomaticamente
•• NellaNella OnDownloadOnDownload sisi puòpuò inserireinserireancheanche codicecodice genericogenerico
Rendering
OnInitOnInit()()
•• Viene chiamata allViene chiamata all’’inizio inizio delldell’’applicazione, subito dopo la applicazione, subito dopo la OnDownloadOnDownload()()
•• EE’’ il posto per gestire il caricail posto per gestire il carica--mento dei mento dei datadata--filesfiles scaricati e scaricati e tutte le inizializzazioni.tutte le inizializzazioni.
••Può ricevere parametri di Può ricevere parametri di ingresso specificati nella pagina ingresso specificati nella pagina HTML con il HTML con il tagtag <<UserParamsUserParams>>
Rendering
OnFrameOnFrame()()
•• EE’’ la la funzionefunzione dedicatadedicata al al rendering. Di default rendering. Di default vieneviene chiamatachiamataad ad unauna frequenzafrequenza paripari al refresh rate al refresh rate (60 Hz).(60 Hz).
•• Il target frameIl target frame--rate rate puòpuò essereesserecambiatocambiato usandousando
SetFramerate(ValueSetFramerate(Value););
•• EE’’ la sola la sola funzionefunzione ad ad accedereaccedere al al frame buffer OpenGLframe buffer OpenGL
•• Il Il massimomassimo frameframe--rate rate possibilepossibile èè100 Hz100 Hz
Rendering
OnTimerOnTimer()()
•• EE’’ la la funzionefunzione normalmentenormalmentededicatadedicata allaalla gestionegestione didi loop ad loop ad altaaltavelocitvelocitàà ((fisicafisica, collision detection, , collision detection, etc.) Di default etc.) Di default vieneviene chiamatachiamata a 100 a 100 Hz.Hz.
•• Il timeIl time--step step puòpuò essereessere cambiatocambiatousandousando::
SetTimestep(ValueSetTimestep(Value););
•• MinimoMinimo timetime--step = 1msstep = 1ms
•• IndependenteIndependente daldal framerateframerate (a (a menomeno cheche ilil sistemasistema non non siasiasovraccaricosovraccarico))
•• Non ha Non ha accessoaccesso al al framebufferframebuffer
Rendering
OnEventOnEvent()()
•• FunzioneFunzione ““previstaprevista”” per la per la gestionegestione didi eventieventi (event(event--driven driven
programming)programming)
•• GliGli eventieventi possonopossono essereessere generatigenerati dada XVR, XVR, daldal
programmatoreprogrammatore XVR (XVR (GenerateEvent(valGenerateEvent(val, , paramparam))) o ) o
allall’’esternoesterno didi XVR (XVR (eventieventi Win32)Win32)
•• Un Un esempioesempio didi eventoevento XVR XVR èè quelloquello generatogenerato quandoquando
terminatermina un download un download eseguitoeseguito con la con la funzionefunzione
FileDownloadFileDownload();();
Rendering
� OnExit()
Viene eseguita all’uscita dell’applicazione.
L’uscita può avvenire esplicitamente o in seguito alla chiusura della pagina HTML contenitore.
OnExitOnExit()()
Rendering
IF..ELSEIF..ELSE
WHILEWHILE
DO..WHILEDO..WHILE
FORFOR
BREAKBREAK
CONTINUECONTINUE
S3D: S3D: StatementsStatements e preprocessoree preprocessore
SWITCH..CASESWITCH..CASE
SETSETSCENE_FOVSCENE_FOV FieldField of of viewview
SCENE_NEARSCENE_NEAR NearNear clippingclipping planeplane distancedistance
SCENE_FARSCENE_FAR Far Far clippingclipping planeplane distancedistance
AUDIO_MODEAUDIO_MODE 3d Audio Setup mode3d Audio Setup mode
#DEFINE#DEFINE
#IFDEF#IFDEF
#ENDIF#ENDIF
#ELSE#ELSE
#INCLUDE#INCLUDE
#PRAGMA#PRAGMA
Rendering
FunzioniFunzioni
•• Il Il tipotipo didi parametriparametri non non vieneviene specificatospecificato
•• Il Il tipotipo del del valorevalore didi ritornoritorno non non vieneviene specificatospecificato
Rendering
�� La dichiarazione delle variabili non specifica il La dichiarazione delle variabili non specifica il tipo. tipo. Il tipo viene specificato con lIl tipo viene specificato con l’’assegnamento o assegnamento o ll’’inizializzazione:inizializzazione:
VAR i;VAR i;VAR j,k;VAR j,k;VAR x = 2;VAR x = 2;VAR y = 3.1;VAR y = 3.1;VAR s = VAR s = ““DonDon’’t t panicpanic !!!!!!””k = 4.3;k = 4.3;i = 8;i = 8;i = 9.2;i = 9.2; VAR v = [0.0, 1.0, 0.0];VAR v = [0.0, 1.0, 0.0];
S3D: Tipi di datoS3D: Tipi di dato
Rendering
�� INT, FLOAT, BOOLEAN INT, FLOAT, BOOLEAN (non sono dichiarabili)(non sono dichiarabili)
�� STRING STRING (non (non èè dichiarabile)dichiarabile)
�� ARRAY: ARRAY: èè un set di elementi a cui si può accedere tramite un set di elementi a cui si può accedere tramite un indice. Gli elementi possono essere di tipo diverso.un indice. Gli elementi possono essere di tipo diverso.Var1 = { 1, Var1 = { 1, truetrue, { 12, 3 }};, { 12, 3 }}; // // ArrayArray mademade of of differentdifferent typestypes
Var2 = Var2 = ArrayArray(12); // (12); // CreatesCreates anan arrayarray of 12 of 12 elementselements
Var3 = Var1[0]; // Var3 Var3 = Var1[0]; // Var3 equalsequals 11
Var4 = Var1[2][0]; // Var4 Var4 = Var1[2][0]; // Var4 equalsequals 1212
Var1[1] = false;Var1[1] = false;
�� VECTOR: VECTOR: èè un un arrayarray di di floatfloat
Var1 = [ 0.2 , 2 , 3.33 , 4 ];Var1 = [ 0.2 , 2 , 3.33 , 4 ];
Var2 = Var2 = VectorVector(16); // (16); // createscreates a 16a 16--elements elements vectorvector
Var3 = Var1[0]; // Var3 Var3 = Var1[0]; // Var3 equalsequals 0.20.2
S3D: Tipi di dato predefinitiS3D: Tipi di dato predefiniti
Rendering
�� OGGETTIOGGETTI
Gli oggetti possono essere dichiarati come istanze di:Gli oggetti possono essere dichiarati come istanze di:
-- Classi predefiniteClassi predefinite-- Classi definite dallClassi definite dall’’utenteutente
Obj1 = Obj1 = CVmLightCVmLight();();
Obj1.SetPosition( 10,10,20);Obj1.SetPosition( 10,10,20);
S3D: Tipi di dato predefinitiS3D: Tipi di dato predefiniti
Rendering
Class Class PlaylistPlaylist
{{var var idid; ; // Identificativo unico della // Identificativo unico della playlistplaylist
var var namename; ; // Nome della // Nome della playlistplaylist
var var elementselements; ; // // ArrayArray di di idid che compongono la che compongono la playlistplaylist
AddAdd((elel);); // Aggiunge un elemento// Aggiunge un elemento
Start(); Start(); // Avvia la // Avvia la playlistplaylist
Stop(); Stop(); // // StopStop della della playlistplaylist
};};
functionfunction PlaylistPlaylist::::PlaylistPlaylist(i,n,)(i,n,) // Il costruttore // Il costruttore èè dichiarato di defaultdichiarato di default
{{
idid = i;= i;
namename = n;= n;
elementselements = {};= {};
} }
functionfunction PlaylistPlaylist::::AddAdd(song)(song)
{{aaddaadd((elementselements,song);,song);
}}
S3D: Dichiarazioni di classiS3D: Dichiarazioni di classi