------------------------------------- RISPOSTE AD ALCUNE DOMANDE RICORRENTI ------------------------------------- *** QUESTIONI EMERSE DURANTE LABORATORIO DI 27 E 30 APRILE *** 1) Errore nel file es3.c: L'istruzione glFrontFaces(GL_CW) va rimpiazzata con glFrontFaces(GL_CCW) (dopo il 27 aprile il file originale e' stato corretto). 2) In es3.c (ed es4.c) se si agisce sulla gluLookAt (come richiesto in uno dei punti del testo) occorre spostare la definizione della stessa da in fondo alla Reshape (dove si trova) a in cima alla Display (subito dopo glClear) affinche' sia eseguita in seguito a glutPostRedisplay. 3) In es4.c, la compomente RGB della della luce ambiente di sfondo e' stata messa a 0.2 0.2 0.2 (il default). Questo significa luce ambiente molto fioca, e le facce illuminate solo dalla luce ambiente (non investite da quella diffusa emessa dalla sorgente LIGHT0) sono molto scure. Su alcuni schermi con colori limitati appaiono addirittura nere, cosi' che non si vedono. Aumentare allora la componente (per es. 0.5 0.5 0.5 sembra un valore buono). *** DOMANDE EMERSE DURANTE LABORATORIO DI GIOVEDI 2 APRILE *** 1) Errata corrige sulla Timer Callback: non viene chiamata OGNI tot millisecondi, ma DOPO tot millisecondi, vale a dire una volta sola e non periodicamente. Inoltre nel commento del sorgente schema.c c'era scritto "secondi" al posto di "millisecondi". Ho corretto note e listato. 2) Come si inserisce una callback che trasforma la scena (per esempio la ruota o la scala) nell'esempio hanoi o star? Molti hanno seguito quanto era fatto in schema.c per la idle callback che ruotava il quadrato, e hanno riscontrato che non succedeva nulla - perche'? - e come bisogna fare invece? In schema.c la idle callback modifica la matrice corrente (glRotate), dopo di che avverte glut di chiamare la display callback per ridisegnare la scena (glutPostRedisplay). La display callback in schema.c non fa nulla sulla matrice corrente, e si limita a disegnare il quadrato; quindi, succede che il quadrato viene disegnato sotto effetto della matrice modificata dalla idle callback. In hanoi.c (o star.c), la display callback agisce sulla matrice corrente, per prima cosa azzerandola (glLoadIdentity). Quindi qualunque modifica un'altra callback faccia su questa matrice viene persa. Occorre seguire un'altra strada. L'altra callback non deve agire sulla matrice, bensi' salvare in qualche variabile globale degli opportuni parametri (angolo di rotazione, fattore di scala...) che poi la display callback utilizzera' per costruire le trasformazioni a cui sottoporre la scena. In questo caso la display callback e' il solo posto del programma dove si disegna e dove si fanno le trasformazioni, le altre callback si limitano a comunicare ad essa i nuovi parametri di trasformazione usando variabili globali. *** ALTRA ERRATA CORRIGE *** In star.c e hanoi.c nella funzione trasfScene, ultima linea, nel secondo argomento della glTranslate c'era un maxX al posto di un maxY. Adesso l'ho corretto.