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
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