17.06.2013 Views

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

Analisi e sintesi dei gesti comunicativi per gli - Maurizio Mancini

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Capitolo VI, Tools di supporto<br />

• muovendo il mouse e tenendo premuto il tasto centrale la quantità di zoom<br />

della telecamera aumenta o diminuisce.<br />

L’implementazione del player si basa sull’introduzione nella classe Joint presentata<br />

nel paragrafo 3 di un metodo LoadFrame(int n); che dato il numero di foto-<br />

gramma n accede all’n-esimo elemento dell’array <strong>dei</strong> fotogrammi e copia le rotazio-<br />

ni <strong>dei</strong> vari BAP nelle corrispondenti giunture dello scheletro.<br />

A questo punto non resta che invocare il metodo ModelDraw (spiegato nel para-<br />

grafo 3) <strong>per</strong> ottenere la visualizzazione del corpo dell’agente al fotogramma n.<br />

Una volta avviata l’animazione va avanti autonomamente. Questo significa che è<br />

stato necessario creare un thread secondario dedicato all’aggiornamento della visua-<br />

lizzazione del corpo dell’agente. Riportiamo il codice del thread e del metodo che<br />

effettua il refresh della visualizzazione della finestra di dialogo principale del player:<br />

DWORD WINAPI PlayThread( LPVOID pParam )<br />

{<br />

//effettuare il cast del parametro nella classe della<br />

//finestra di dialogo principale<br />

CDlgOglDlg* pObject = (CDlgOglDlg*)pParam;<br />

//ripetere all’infinito<br />

while(true)<br />

{<br />

//bloccare qui finché il dialogo non esce dalla fase di refresh<br />

while(pObject->refreshing==true)<br />

{<br />

Sleep(10);<br />

}<br />

//inviare al dialogo un messaggio che lo avverta che può iniziare<br />

//la fase di refresh<br />

pObject->refreshing=true;<br />

pObject->PostMessage(WM_PAINT,0,0);<br />

//rimanere inattivo <strong>per</strong> 10 millisecondi<br />

Sleep(10);<br />

}<br />

//questa istruzione non verrà mai raggiunta<br />

return 0;<br />

}<br />

void CDlgOglDlg::Refresh(){<br />

//se l’animazione è stata avviata<br />

if(playing)<br />

{<br />

//calcolare il numero di fotogramma corrente<br />

//(25FPS=>ogni fotogramma dura 40 ms)<br />

102

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!